如何在已映射集合的NHibernate实体周围放置一个外观?

时间:2011-12-08 21:26:02

标签: c# .net nhibernate

例如,假设一个名为Customer的映射实体具有Orders列表的属性。

我想编写一个使Customer适应SpecialCustomer的类,而SpecialCustomer将有一个名为SpecialOrders的属性,用于调整/包装客户的订单列表。

有没有人能想到一种方法来做到这一点而不破坏NHibernate的延迟加载语义?如果我将Customer子类化并让我的SpecialOrders属性返回Orders.Cast(),我相信它将不得不遍历Orders属性中的所有项目(我不想要),我宁愿不公开订单尽可能在SpecialCustomer的财产。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不相信你可以使用List<T>来做到这一点,因为通用类型需要两种方式,你不能同时兼顾协方差和逆变。

如何映射受保护的属性List<Order> OrdersCore以及客户公开IEnumerable<Order> Orders属性以及公开IEnumerable<SpecialOrder> SpecialOrders的SpecialCustomer。后者只需使用OrdersCore.Cast()。除非调用者这样做,否则这不会导致列表被不必要地迭代。成本将是最小的。下方是你必须使用适当的参数类型为AddOrder()等每个类提供方法。