NHibernate 4.0 中断派生 class 映射

NHibernate 4.0 breaks derived class mapping

我使用 NHibernate 和 FluenNHibernate。

我有 2 类 优惠和特惠。 Table "SpecialDeal" 不包含卷列。我实际上只存储和使用 SpecialDealMap 中显示的 4 个属性。之前我把NHibernate更新到4.0版本就OK了。现在查询失败了,因为它们还试图从 "SpecialDeal" table 获取交易量,尽管 SpecialDealMap 中不存在交易量,而且它确实不在 "SpecialDeal" table 中。

我该如何解决?

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);
}

您将不得不重构您的代码。如果 Volume 不是 Special Deal 的一部分,那么这真的不是一种关系。

我建议 class 布局,例如

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; }
}

您还需要确定是要制作 table-per-hierarchy 还是 table-per-subclass。你目前没有使用任何 Nhibernate 的继承映射,因为你的 sub-class 没有使用 SubclassMap 进行映射。它正在使用 ClassMap。