我正在使用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吗?
答案 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 );
}
}