2

FetchMode.Eager(データベースから) インスタンスを要求するときに、構文を使用して子エンティティを積極的にロードするように、FNH を介して構成されたいくつかのエンティティがあります。今、私はこれがマッピングの遅延読み込みを無視し、子エンティティに「実際の」データを入力するという印象を受けました。

これを行う理由は、を使用してエンティティのコレクションを反復処理し、一連の結果を生成したいからですParallel.ForEachが、次のエラーが発生します。

[18000] System.InvalidOperationException:
There is already an open DataReader associated with this Command 
which must be closed first. 

「NHibernateUtil.Initialize」を使用してすべての子エンティティを初期化すると、期待どおりに機能します。

の使用における私の理解は間違っていますFetchMode.Eagerか?

4

1 に答える 1

1

私は本当にそれをしようとはしませんでした。各 Parallel.ForEach 関数は、異なるスレッドで実行できます。構成によっては、NHibernate ISession がスレッドに対して格納されます。つまり、呼び出し元のスレッド以外はセッションにアクセスできないため、すべてが失敗します。

個人的には、すべてを転送オブジェクトに取得してから、その上で Parallel.ForEach を実行します。

于 2011-03-27T15:26:41.390 に答える