5

私はNHibernateを初めて使用しています(それを使用した最初の大きなプロジェクト)。
私は、using ブロック内に ISession オブジェクトを作成して、オブジェクトまたはオブジェクトのリストを取得するという単純な方法でデータにアクセスしていました。そのようにして、コード ブロックを終了した後にセッションが破棄されました。

ただし、これは遅延読み込みが必要な状況では機能しません。
たとえば、Orders のコレクションであるプロパティを持つ Customer オブジェクトがある場合、遅延ロードが試行されると、Hibernate 例外が発生します。
別の方法を使用している人はいますか?

4

4 に答える 4

2

優れたチュートリアルについては、SummerOfNHibernateの Web キャストをご覧ください。具体的に探しているものは、webisode 5 または 6 まで提供されません。

于 2008-08-28T15:43:20.287 に答える
1

作業単位全体に対してセッションを開いたままにします。セッションの寿命が短すぎる場合、セッション レベルのキャッシュを利用できません (これは重要です)。データベースへのラウンドトリップを防ぐことができれば、多くの時間を節約できます。また、理解することが重要な遅延読み込みを利用することもできません。

セッションの有効期間が長すぎると、他の問題が発生する可能性があります。

これが Web アプリの場合は、session-per-httpRequest パターンでうまくいくでしょう。基本的に、これはリクエストの開始時にセッションを開き、最後にフラッシュ/クローズする HttpModule です。セッションは静的変数ではなく HttpContext.Items に保存してください。<--- 対処したくないあらゆる種類の問題につながります。

作業単位の実装については、RhinoCommonsも参照してください。

于 2008-08-28T15:43:02.860 に答える
0

Web アプリ (おそらく ASP.NET を使用) を開発しているため、CodeProjectで ASP.NET を使用した NHibernate のベスト プラクティスを確認してください。

于 2008-09-09T18:16:58.320 に答える