Fluent nhibernate Fluent NHibernate和每个子类继承

Fluent nhibernate Fluent NHibernate和每个子类继承,fluent-nhibernate,table-per-subclass,Fluent Nhibernate,Table Per Subclass,我有一个基类和两个child(a:Base和B:Base),我想将它们映射到两个表(表a和表B)。这在流利的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 {

我有一个基类和两个child(a:Base和B:Base),我想将它们映射到两个表(表a和表B)。这在流利的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;}
}
公共类基
{
公共虚拟整数Id{get;set;}
公共虚拟int IndexIn{get;set;}
公共虚拟产品产品{get;set;}
}
公共A类:基本类
{
公共虚拟字符串值{get;set;}
}
B类公共服务:基本服务
{
公共虚拟int值{get;set;}
公共虚拟IList序列{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);
     }
}
公共类基本映射:类映射
{
公共底图()
{
Id(x=>x.Id);
Map(x=>x.IndexIn);
参考文献(x=>x.Product);
}
}
公共类AMap:子类映射
{
公共AMap()
{
Map(x=>x.Value);
}
}
公共类BMap:子类映射
{
公共BMap()
{
Map(x=>x.Value);
HasMany(x=>x.Sequences);
}
}
但在这种情况下,它会创建三个表(A、B和Base)。这很好,但我需要减少表的数量,所以我可以在A表和B表中都使用Base字段。通常,我只想将A和B映射为普通类(不使用继承),但我需要能够添加一些其他类,在这些类中我可以拥有以下属性:

public virtual IList<Base> ListofAandB {get;set;}
公共虚拟IList ListoFandB{get;set;}
如果我删除BaseMap定义并将A和B映射为ClassMap,如果我尝试使用上面编写的属性,我将收到错误“找不到Base的映射定义”。

如果继承只存在于代码中,而不存在于数据库模型中,您将无法映射
ListoFandB
属性。要使NHibernate按定义映射此属性,您需要在数据库中有一个
Base
表。

好的,谢谢。在这种情况下,我的最佳选择是将它们映射为公共类,并使用两个属性IList和IList,而不是IList。出于好奇,为什么需要减少表的数量?