0

継承マッピングに具象クラスごとに Fluent NHibernate とテーブルを使用しています。

抽象基本クラスと他の 2 つのサブクラスがあります。

私の基本クラスには Id 列があります。作成されたテーブルは問題ありません。すべてのテーブルには独自の Id 列があります。ただし、これら 2 つのテーブルのシーケンスは 1 つだけです。

サブクラスごとに異なるシーケンスを割り当てたい。

public abstract class Base
{
    public virtual int Id { get; set; }
}

public class BaseMap : ClassMap<Base>
{
    public BaseMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
    }
}

public class A : Base
{
    public virtual int AmountOfA { get; set; }
}

public class AMap : ClassMap<A>
{
    public AMap()
    {
        Map(x => x.AmountOfA );
    }
}

public class B : Base
{
    public virtual int AmountOfB { get; set; }
}

public class BMap : ClassMap<B>
{
    public BMap()
    {
        Map(x => x.AmountOfB );
    }
}

これは Fluent NHibernate で可能ですか?

4

1 に答える 1

0

これは設計によるものです。

  • session.Get<Base>(1);IDが一意ではないため、未定義の動作が発生します

  • データベースに値 1 を持つ基本クラスへの参照がある場合を考えてみReference(x => x.SomeBase);ましょう。A(Id: 1) または B(Id: 1) が参照されているオブジェクトであるかどうかを知ることはできません。

Base が Id プロパティを再利用するためだけにある場合は、それを独自のエンティティとしてマップせずに基本クラスを作成します

public class BaseMap<T> : ClassMap<T> where T : Base
{
    public BaseMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
    }
}

public class AMap : BaseMap<A>
{
    public AMap()
    {
        Map(x => x.AmountOfA );
    }
}
于 2013-03-27T10:05:45.057 に答える