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

时间:2011-12-17 17:19:42

标签: nhibernate

我有Order和OrderLines的简单域名。是否可以在没有连接的情况下加载Order和关联的OrderLine对象?我正在尝试使用Future / FutureValue来执行两个简单的查询。我希望NHibernate知道如何在缓存中组合这些。我正在使用NHibernate 3.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;

这可以按预期将两个查询发送到数据库中。但是当我使用循环来完成order.OrderLines NHibernate发送另一个查询来获取订单行。我的猜测是因为我正在使用约束(Where(x =&gt; ...)NHibernate不知道如何从会话缓存中获取对象。

为什么我要在不加入

的情况下执行此操作

我知道我可以使用Fetch(x =&gt; x.OrderLines).Eager但有时实际的父(在这种情况下是Order)是如此之大,以至于我不想执行连接。如果我执行连接,则所有结果集都包含每个订单行的所有订单列。我没有任何原始数字或任何我只是想知道这是否可能。

1 个答案:

答案 0 :(得分:0)

这很可能。见nHib的fetching strategies 您可以选择“选择”(如果您一次只处理一个Order)或“选择”。