NHibernate 4.0打破了派生类映射

时间:2016-10-24 17:10:57

标签: nhibernate fluent-nhibernate

我使用NHibernate和FluenNHibernate。

我有2个课程Deal和SpecialDeal。 表" SpecialDeal"不包含Volume列。我真的存储并只使用了SpecialDealMap中显示的4个属性。在我将NHibernate更新到4.0版本之前就可以了。现在查询失败了,因为他们试图获得来自" SpecialDeal"虽然在SpecialDealMap中没有Volume,但它确实不在" SpecialDeal"表。

我该如何解决?

public class Deal
{
    public long Id { get; set; }
    public DateTime Time { get; set; }
    public decimal Price { get; set; }
    public decimal Volume { get; set; }

    public Deal() {}
}

public class SpecialDeal: Deal
{
    public string Code { get; set; }
}

public class SpecialDealMap: ClassMap<SpecialDeal>
{
    Id(x => x.Id);
    Map(x => x.Time);
    Map(x => x.Price);
    Map(x => x.Code);
}

1 个答案:

答案 0 :(得分:0)

您将不得不重构您的代码。如果Volume不是特殊交易的一部分,那么这实际上并不是一种关系。

我建议像

这样的课程布局
public class Deal
{
    public long Id { get; set; }
    public DateTime Time { get; set; }
    public decimal Price { get; set; }
}

public class VolumeDeal : Deal
{
    public decimal Volume { get; set; }
}

public class SpecialDeal : Deal
{
    public string Code { get; set; }
}

您还可以确定是要创建每个层次的表还是每个子类的表。你目前还没有使用任何Nhibernate的继承映射,因为你的子类没有使用SubclassMap进行映射。它使用ClassMap。