首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate。使用2个查询和合并加载实体

NHibernate。使用2个查询和合并加载实体
EN

Stack Overflow用户
提问于 2013-02-10 16:58:37
回答 1查看 206关注 0票数 1

我有一个复杂的实体,有很多子对象集合,它们也很复杂:

代码语言:javascript
复制
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;
    ......
}

我的支付类聚合了许多其他对象。

代码语言:javascript
复制
public class Payment:  ICheckable
{
    public virtual A A;
    public virtual B B;
    public virtual C C;
    public virtual D D;
    ......
}

我想获得两个查询的订单:

  1. 不付款的装载订单实体(FetchMode.Lazy)
  2. 通过连接其对象按顺序加载支付
  3. 将合并令与其付款结合起来

我不想让nhib懒散地支付负载,因为我想重写支付对象的获取策略。

因此,我的问题是如何将两个查询结果合并在一个聚合中。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-10 18:44:37

在这种情况下,batch-size="25"设置可以为您完成工作。阅读更多文档:19.1.5.使用批取

批次大小可应用于类或集合映射:

付款类别

代码语言:javascript
复制
<class name="Payment" batch-size="10">...</class>

收款

代码语言:javascript
复制
<class name="Order">
    <set name="Payments" batch-size="3">
        ...
    </set>
</class>

简单地说,批处理是如何工作的: NHibernates加载所有Orders的集合。然后,基于批处理大小设置(例如,25)创建对Payments的几次调用,这些调用由刚刚加载的订单的ID过滤过:

其中OrderId in (@o1,@o2,@O3.@o25)

合并将在NHibernate会话中为您完成。根据我的经验这是最强大的地图..。懒惰和分批。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14800152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档