Nhibernate拦截器没有拾取基类的属性

时间:2012-05-01 20:44:35

标签: nhibernate nhibernate-mapping

我正在从Fluent转变为Loquacious,而且我遇到了一个问题,我的拦截器并没有像我认为的那样得到所有领域。如果我查看OnSave函数

public override Boolean OnSave(Object entity, Object id, Object[] state,
        String[] propertyNames, IType[] types)

并查看propertyNames,其中唯一的项目是在映射文件中显式映射的项目(在示例中,这只是ID,Start和End)。

在我的情况下,虽然我有一个根本没有映射的基类。相反,它只包含被拦截器填充的属性。这曾经在Fluent Nhibernate中工作,但是现在我已经转移到Nhibernate 3.3了,我再也无法让它工作了。

我的类/映射看起来像这样

public class BaseAuditEntity
{
  public virtual int ModifiedByUserID { get; set; }
  public virtual DateTime LastModifiedTime { get; set; }
}

public class Foo : BaseAuditEntity
{
  public virtual int ID { get; protected internal set; }
  public virtual DateTime Start { get; protected internal set; }
  public virtual DateTime End { get; protected internal set; }
}

public class FooMap: ClassMapping<Foo>
{
  Id(x => x.ID, m => m.column("fooID"));
  Property(x => x.Start, m => m.column("start"));
  Property(x => x.End, m => m.column("end"));
}

有关如何使这项工作的任何想法?我不想每个类都映射这个,我认为我不需要映射BaseAuditEntity,至少在Fluent中不需要它。

1 个答案:

答案 0 :(得分:0)

您可以制作基础映射类

public class BaseAuditEntityMapping<T> : ClassMapping<T> where T: BaseAuditEntity
{
    ManyToOne(x => x.ModifiedByUser);
    Property(x => x.LastModifiedTime);
}

public class FooMap: BaseAuditEntityMapping<Foo>