流fluentなnhibernateおよびsubclass継承
-
27-10-2019 - |
質問
基本クラスと2人の子供(A:ベースとB:ベース)があり、2つの表(表Aと表B)にマッピングしたいと思います。それは流fluentなナイベナートで可能ですか?ので、私は持っています:
public class Base
{
public virtual int Id {get;set;}
public virtual int IndexIn {get;set;}
public virtual Product Product {get;set;}
}
public class A : Base
{
public virtual string Value {get;set;}
}
public class B : Base
{
public virtual int Value {get;set;}
public virtual IList<Sequence> Sequences {get;set;}
}
私のマッピングは次のとおりです。
public class BaseMap : ClassMap<Base>
{
public BaseMap()
{
Id(x => x.Id);
Map(x => x.IndexIn);
References(x => x.Product);
}
}
public class AMap : SubclassMap<A>
{
public AMap()
{
Map(x => x.Value);
}
}
public class BMap : SubclassMap<B>
{
public BMap()
{
Map(x => x.Value);
HasMany(x => x.Sequences);
}
}
ただし、その場合、3つのテーブル(A、B、ベース)を作成します。それはいいことですが、テーブルの数を減らす必要があるので、AとBの両方のテーブルにベースのフィールドを持っていても大丈夫です。一般的に、私は単にaとbを通常のクラスとしてマッピングしたい(継承を使用せずに)が必要ですが、プロパティを持つことができる他のクラスを追加できる必要があります。
public virtual IList<Base> ListofAandB {get;set;}
ベースマップの定義を削除し、aとbをクラスマップとしてマッピングするだけの場合、<>エラーを受信します。上記のプロパティを使用しようとすると、「ベースのマップ定義が見つかりません」。
解決
あなたはあなたをマッピングすることができません ListOfAAndB
継承がコードにのみ存在し、データベースモデルには存在しない場合。このプロパティが定義されているようにマップするには、 Base
データベースのテーブル。
所属していません StackOverflow