0

我使用 Fluent NHibernate 和每个具体类的表进行继承映射。

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

我的基类有 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 可以做到这一点吗?

4

1 回答 1

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 );
    }
}
于 2013-03-27T10:05:45.057 回答