2011-01-17 9 views
0

複雑な基準に従ってデータセットが必要なときに最高のパフォーマンスが得られるのは何ですか? 2つの選択肢があります:複雑なICriteriaまたはSession.Linqステートメントを作成するか、ルートオブジェクトからLINQを使用し、Hibernateに遅延ロードを処理させます。 (セッションを使用して)NHibernateのパフォーマンス:Session.CriteriaとLINQのインメモリ

オプション1:(大きな結果セットは、SQLサーバからプルされることを意味するかもしれない「インメモリ」クエリを行うために使用するルートオブジェクト)

var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "[email protected]) 
//.... 
.Where(condition => condition.Orders.Any(condition)) 
//... more conditions 

オプション2:

var contractor = Session.Linq<Contractor>().Single(c => c.Id == 1); 

contractor.Orders.SelectMany(o => o.NestedCollection) 
.Where(c => c.List.Any(condition)) 
.Where(//..... more complex filtering; 

NHPRofではメモリ内の亜種が警告を生成しませんが、セッションバリアントは、あまりにも多くの結合がパフォーマンスを低下させる可能性があるという警告を生成します。

答えて

0

しかし、一般的には、データベースが仕事をして、必要とするものを熱心に取り出すことをお勧めします。例外はfetching multiple associationsです。