2009-05-06 9 views
44

nhibernateにlinqを使用して複数のオブジェクトに対してfetchmodeを熱心に設定する方法はありますか? 1つのオブジェクトだけを設定できる拡張メソッドがあるようです。しかし、私はそれを複数のオブジェクトに設定する必要があります。これは可能ですか?ありがとうNHibernateのLinqと熱心なローディングモードのフェッチ

答えて

18

ちょうどそれをもう一度使用してください。

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

またはquery.Expand( "Property1、Property2"); – Sprintstar

+2

それは拡張方法ですか? NHibernate.Linq v2.0.50727でそれを見つけることができません。 –

+0

私は、バージョン1.0.0.0を意味します。 –

8

これまでの説明から分かるように、SetFetchModeはオブジェクトツリーを水和させ、Expandメソッドはデカルト積を取得します。

102

新しいのLINQプロバイダは少し違ったことを行います

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

より: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

+0

上にあります。もし 'Orders'がそれ自身のサブクラスを持っていれば、それは熱心に読み込まれますか?そうでない場合は、クエリをロードするためにどのように変更しますか? – ilans

+1

孫を得るには:var customers = session.Query .FetchMany(c => c.Orders) .TheFetchMany(o => o.OrderLines).ToList(); ' – ilans

0

contiuneであなたがする必要がある@Mike Hadlow答え、フェッチ次のレベル(孫)に:

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

関連する問題