我们有一个名为Order的NHibernate实体。订单有一个职位列表和其他一些东西。
我现在实现了一个名为OrderMin的新实体,它现在是Order的基类。我对OrderPosition做了同样的操作,它现在有一个名为OrderPositionMin 的基类
当我尝试加载OrderMin集合时,我会得到一个奇怪的行为:在集合中,现在有OrderMin和Order对象,这是我的代码:
var mins = Session.QueryOver<OrderMin>()
.Where(x => RestrictionExtensions.IsIn(x.Id,
list))
.List();
当我查看集合时,包含的Order对象现在有2个Lists Positions Lists。一个来自类型OrderPosition,一个来自OrderPositionMin。
我尝试在Order对象中使用override关键字,但这是不可能的,因为所有属性都必须是虚拟的。
有人知道这里出了什么问题吗?
提前感谢,Dennis
这是NHibernate中的默认行为。您需要声明一个基类,Order和OrderMin从该基类派生。
public abstract class OrderBase
{
// The properties that are needed by all derived types
}
public class OrderMin : OrderBase {}
public class Order : OrderBase {}
之后,您的查询结果应该看起来像您所期望的那样。如果查询基类,NHibernate将具体化基类的所有实体和派生类型的所有实体。