具有Fluent NHibernate的子类的不同序列

时间:2013-03-25 07:00:23

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在使用Fluent NHibernate和table for concrete class来进行继承映射。

有一个抽象基类和另外两个子类。

我的基类有Id列。创建的表是可以的。所有表都有自己的Id列。但序列只是这两个表的一个。

我想为每个子类分配不同的序列。

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吗?

1 个答案:

答案 0 :(得分:0)

这是设计的。

  • session.Get<Base>(1);会有未定义的行为,因为ID不是唯一的

  • 考虑在数据库中引用基类Reference(x => x.SomeBase);且值为1时的情况:不可能知道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 );
    }
}