NHibernate在没有联接的情况下急切地查询父对象和子对象

NHibernate在没有联接的情况下急切地查询父对象和子对象,nhibernate,Nhibernate,我有一个带有订单和订单行的简单域。是否可以在没有联接的情况下加载订单和关联的订单行对象?我试图使用Future/FutureValue来执行两个简单的查询。我希望NHibernate知道如何在缓存中组合这些。我使用的是NHibernate3.2,带有纯代码映射 到目前为止,我的情况如下: // Get all the order lines for the order var lineQuery = session.QueryOver<OrderLine>()

我有一个带有订单和订单行的简单域。是否可以在没有联接的情况下加载订单和关联的订单行对象?我试图使用Future/FutureValue来执行两个简单的查询。我希望NHibernate知道如何在缓存中组合这些。我使用的是NHibernate3.2,带有纯代码映射

到目前为止,我的情况如下:

    // Get all the order lines for the order
    var lineQuery = session.QueryOver<OrderLine>()
        .Where(x => x.WebOrder.Id == id).Future<OrderLine>();

    // Get the order
    var orderQuery = session.QueryOver<WebOrder>()
        .Where(x => x.Id == id)
        .FutureValue<WebOrder>();

    var order = orderQuery.Value;
这可以像预期的那样将两个查询发送到数据库中。但是,当我使用loop遍历order.OrderLines时,NHibernate会发送另一个查询以获取订单行。我猜这是因为我使用了约束,其中x=>。。。NHibernate不知道如何从会话缓存中获取对象

为什么我不加入就想这么做


我知道我可以使用Fetchx=>x.OrderLines.Eager,但有时这种情况下的实际父级顺序太大,我不想执行联接。如果执行联接,那么结果集包含每个订单行的所有订单列。我没有任何原始数据或任何东西,我只是想知道这是否可能。

这是很有可能的。看nHib的。
如果一次只处理一个订单,您可以选择“选择”或“子选择”。

如何使用QueryOver指定选择抓取策略?我知道ICriteria支持FetchMode枚举,但我在QueryOver.hmm中找不到它。。其实不太清楚。我知道您可以在类映射中定义一个抓取策略,但我也不知道是否可以在每个查询中设置它。