例如,假设一个名为Customer的映射实体具有Orders列表的属性。
我想编写一个使Customer适应SpecialCustomer的类,而SpecialCustomer将有一个名为SpecialOrders的属性,用于调整/包装客户的订单列表。
有没有人能想到一种方法来做到这一点而不破坏NHibernate的延迟加载语义?如果我将Customer子类化并让我的SpecialOrders属性返回Orders.Cast(),我相信它将不得不遍历Orders属性中的所有项目(我不想要),我宁愿不公开订单尽可能在SpecialCustomer的财产。
有什么想法吗?
答案 0 :(得分:1)
我不相信你可以使用List<T>
来做到这一点,因为通用类型需要两种方式,你不能同时兼顾协方差和逆变。
如何映射受保护的属性List<Order> OrdersCore
以及客户公开IEnumerable<Order> Orders
属性以及公开IEnumerable<SpecialOrder> SpecialOrders
的SpecialCustomer。后者只需使用OrdersCore.Cast()。除非调用者这样做,否则这不会导致列表被不必要地迭代。成本将是最小的。下方是你必须使用适当的参数类型为AddOrder()等每个类提供方法。