我有一个 Base 类和两个孩子(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 的地图定义”。