2012-05-10 12 views
1

NHibernateが使用されていたレガシーアプリケーションを効率的に使用するために取り組んでいます。私は現在、これまで200以上のクエリが実行されている方法を踏んでいます。これは主にN + 1の問題によるものです。とにかく一歩で子コレクションを遅延ロードする方法

、私はこれを修正考えると、私の質問は次のとおりです。

単一の操作中にアクセスされるほとんどすべてが10本の子コレクション、たとえば、と実体を考えると、怠惰への道があります - NHibernateがアクセスされるたびに(例えば、foreachループの中で、今起こっている)NHibernateに個々の子レコードを遅延ロードさせるのではなく、各子コレクションを単一の呼び出しでロードします。これらの子コレクションのすべてを一度に読み込むことは、膨大なクエリであり、パフォーマンスはあまり高くありません。しかし明らかにこのN + 1アプローチは間違っています。どのようにNHibernateに、オンデマンドで子コレクション全体をロードするクエリを実行するように指示できますか?これはまだ11個のクエリを提供しますが、200個よりも優れていて、多分、すべてのものを読み込もうとしたら大したクエリよりも優れています。

ありがとうございます!

答えて

2

NHibernateUtil.Initialize(yourObject.ChildCollection)メソッドを使用できます。このメソッドは、プロキシに、マッピングで設定したフェッチ戦略に基づいてデータをロードさせます。出典:NHibernate documentation

+0

いいね、ありがとう! – sydneyos

関連する問題