我有很多子对象集合的复杂实体,也很复杂:
public class Order : AdvancedBaseOrder, ICheckable
{
public virtual ICollection<RouteUnit> RouteUnits
public virtual ICollection<Invoice> Invoices
public virtual ICollection<Call> Calls;
public virtual ICollection<Payment> Payments;
......
}
我的付款类汇总了很多其他对象
public class Payment: ICheckable
{
public virtual A A;
public virtual B B;
public virtual C C;
public virtual D D;
......
}
我想通过2个查询获得订单:
我不希望nhib延迟加载,因为我想覆盖付款对象的获取策略。
所以我的问题是如何在一个聚合中合并两个查询结果 。感谢
答案 0 :(得分:1)
在这种情况下,batch-size="25"
设置可以为您完成工作。请阅读文档:19.1.5. Using batch fetching。
批量大小可以应用于类或集合 maping:
付款类
<class name="Payment" batch-size="10">...</class>
付款收集
<class name="Order">
<set name="Payments" batch-size="3">
...
</set>
</class>
批处理如何工作:NHibernates加载所有Orders
的集合。然后根据批量大小设置(例如25)创建很少的Payments
来电,过滤了ID
刚刚加载的订单:
WHERE OrderId(@ o1,@ o2,@ O3 ... @ o25)
将在NHibernate会话中为您完成合并。根据我的经验,这是最强大的映射......懒惰和放大配料。