0

FluentからLoquaciousに変換していますが、インターセプターが思ったとおりにすべてのフィールドを取得できないという問題が発生しました。OnSave関数を見ると

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

そして、propertyNamesを見てください。そこにある唯一のアイテムは、マッピングファイルに明示的にマッピングされたアイテムです(この例では、これはID、Start、およびEndになります)。

私の場合、まったくマップされていない基本クラスがあります。代わりに、インターセプターによって入力されるプロパティが含まれているだけです。これは以前はFluentNhibernateで機能していましたが、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では必要ありませんでした。

4

1 に答える 1

0

基本マッピングクラスを作成できます

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

public class FooMap: BaseAuditEntityMapping<Foo>
于 2012-05-03T06:53:47.100 に答える