2016-04-06 35 views
1

LinqのNHibernateクエリに何らかの問題があります。NHibernateコレクションeager loading take count

詳細のバウチャーを取得する必要があります。私はそれらを反復する必要があるので、私はすべての情報を一回の実行で取得したかったのです。

私のクエリは、次のいずれかです。VouchersToIntegrateはバウチャーであり、各バウチャーの行をVoucherLines

   return this.Session.Query<VouchersToIntegrate>() 
       .Take(query.BatchSize) 
       .Fetch(x => x.VoucherLines)      
       .ToList(); 

ここでbatchSizeは50.000に設定されていますが、すべてのオブジェクトを返すと23XXXになります。これは、データベース(クライアント側)からすべてのオブジェクトを取得した後で、フレームワークが内部的に別名を実行していると推測するためです。 SQLサーバー側に別個のフィルタを持つ50.000オブジェクトを取得する他の方法はありますか?

おかげ

+0

NHibernateで遅延ロードされたプロパティを反復処理しても、エンティティを適切にマップしていれば、n + 1ロードの問題は発生しません。 [詳細はこちら](/ a/36070727/1178314)を参照してください。したがって、n + 1の読み込みの問題があるために熱心に読みたい場合は、読んでください。 –

答えて

0

のNHibernateのLINQプロバイダでこのクエリを構築する方法はありません。

ただし、適切なSQLクエリを手作業で作成し、NHibernateの「ネイティブSQL」API:http://nhibernate.info/doc/nhibernate-reference/querysql.htmlを使用してエンティティにマップできます。

関連する問題