3

共通のフィールドを共有する 2 つのテーブルがあります。これらすべてを再マップするのではなく、共通のフィールドを持つ基本クラスが必要です。POCO の場合、これは簡単です。

class Base
{
   public string commonField {get;set;}
}
class Derived : Base
{
   public string specificField {get;set;}
}
class OtherDerived : Base
{
   public string specificOtherField {get;set;}
}

「ベース」のテーブルのようなものはないことに注意してください。複数のテーブル間で共有される多くの共通フィールドを保持するだけです。はい、これが十分に正規化されていないことはわかっていますが、それを処理する必要があります。

私の質問は、これらの共通のプロパティをマップするコードを複製することなく、流暢な nHibernate でこれを実装する方法はありますか?

4

1 に答える 1

7

これを行うには、から継承できますClassMap。私は次のようなことをします:

public class BaseMap<T> : ClassMap<T> where T : Base
{
    public BaseMap()
    {
        Map(x => x.commonField, "COMMON_FIELD");
    }
}

public class DerivedMap : BaseMap<Derived>
{
    public DerivedMap()
    {
        Table("DERIVED_TABLE");
        Polymorphism.Explicit();  //You may want to use this in your case.
        Map(x => x.DerivedField, "DERIVED_FIELD");
    }
}

上記に注意してくださいPolymorphism.Explicit();。あなたの場合、私はあなたがこれを望んでいると思います。

http://www.nhforge.org/doc/nh/en/#mapping-declaration-class

于 2012-08-28T13:30:49.973 に答える