web-dev-qa-db-ja.com

熱心な読み込みのNHibernateおよびフェッチモードのLinq

Nhibernateのlinqを使用して、フェッチモードを複数のオブジェクトに熱心に設定する方法はありますか? 1つのオブジェクトしか設定できない拡張メソッドがあるようです。ただし、複数のオブジェクトに設定する必要があります。これは可能ですか?ありがとう

45
NabilS

一度以上使用してください。

IList<Entity> GetDataFromDatabase()
{
    var query = session.Linq<Entity>();
    query.Expand("Property1");
    query.Expand("Property2");
    return query.ToList();
}
19
Paco

新しいLinqプロバイダーは、少し異なる方法でそれを行います。

var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList();

詳細: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

105
Mike Hadlow

私の知る限り、これは同等ではありません。SetFetchModeはオブジェクトツリーをハイドレートし、Expandメソッドはデカルト積を取得します。

8
Jeff

_@Mike Hadlow_の回答に進み、次のレベル(孫)を取得する必要があります。

var customers = session.Query<Customer>() .FetchMany(c => c.Orders) .ThenFetchMany(o => o.OrderLines).ToList();

1
ilans