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。
我使用 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。