我有一个基类和两个子类(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
表。