0

Base クラスと 2 つの子クラス (A:Base と B:Base) があり、それらを 2 つのテーブル (テーブル A とテーブル B) にマップしたいと考えています。Fluent NHibernateでそれは可能ですか? ので、私は持っています:

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 テーブルの両方に Base のフィールドを配置しても問題ありません。通常、A と B を (継承を使用せずに) 通常のクラスとして単純にマップしたいのですが、プロパティを持つことができる他のクラスを追加できるようにする必要があります。

public virtual IList<Base> ListofAandB {get;set;}

BaseMap 定義を削除し、A と B を ClassMap<> としてマップするだけで、上記のプロパティを使用しようとすると、「Base のマップ定義が見つかりません」というエラーが表示されます。

4

1 に答える 1

2

ListOfAAndB継承がコードにのみ存在し、データベースモデルには存在しない場合、プロパティをマップすることはできません。BaseNHibernateにこのプロパティを定義どおりにマップさせるには、データベースにテーブルが必要です。

于 2012-01-11T14:23:50.227 に答える