1

過失によって引き起こされるデータベース呼び出しの量を最小限に抑えるために、必要なすべてのエンティティを表示する前にプリロードする要件を作成したいと思います。コレクションを返す前にNHibernateにコレクションのテストを強制することは可能ですか?

オブジェクトを返す前にチェックするようなことを考えていましたがNHibernateUtil.IsInitialized()、すべてのプロパティに対して手動で実行せずにグローバルに実装する方法がわかりませんでした。

注:アプリケーション全体で積極的な読み込みを有効にしたくはありません。少しスマートな遅延読み込みを導入するだけです。

4

1 に答える 1

0

コンシューマーは、どのパスを熱心にロードするかを指定する必要があり、DALはSetFetchMode/Fetchを使用してパスを熱心にロードする必要があります。その後、すべてのデータがフェッチされます。

コメントへの回答:データをロードした後

  • session.Close()セッションを破棄します
  • session.Clear()すべてのインスタンスを切り離します
  • session.Evict(obj)objと関連エンティティを切り離します

例えば

foreach (var item in queryresults)
{
    session.Evict(item);
}

ユニタライズされたすべてのプロキシとコレクションがLazyLoadExceptionsをスローするようになりました

于 2012-05-08T08:54:48.383 に答える