Fluent NHibernate和每个子类的继承



我有一个基类和两个子类(a:Base和B:Base),我想将它们映射到两个表(表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);
     }
}

但在这种情况下,它会创建三个表(A、B和Base)。这很好,但我需要减少表的数量,所以我可以在A和B表中都有Base的字段。一般来说,我想简单地将A和B映射为普通类(不使用继承),但我需要能够添加一些其他类,在那里我可以拥有属性:

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

如果我删除BaseMap定义并仅将A和B映射为ClassMap<>如果我尝试使用上面写的属性,我会收到错误"找不到Base的映射定义"。

如果您的继承仅存在于代码中,而不存在于数据库模型中,那么您将无法映射ListOfAAndB属性。要使NHibernate按定义映射此属性,您需要在数据库中使用Base表。

最新更新