0

我有一个 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 的地图定义”。

4

1 回答 1

2

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

于 2012-01-11T14:23:50.227 回答