質問

NHibernateの新機能(私の免責事項)。同様の興味深い MVCに関する記事に出会いましたが、汎用Webアプリケーション内でNHibernateセッションを管理するための一般的なベストプラクティスはどのようなものかについて、もっと興味があります。

バロウプロジェクトに出会いましたが、いくつかの異なる方向性があるようです。私が必要とするたびに新しいSessionFactoryを作成することは、おそらく私の最大の関心事ではないことを知っています。データベースに触れるため、コミュニティがセッションを管理するために何をするかに興味があります。バロウを使用していますか? SessionFactoryをシングルトンでラップしますか?

どんな方向や洞察も常に大歓迎です。

役に立ちましたか?

解決

質問に直接回答するには、 ISessionFactory オブジェクトはシングルトンでなければなりません。プログラムでこれを行う(つまり、C#シングルトンでラップする)か、IoCコンテナーで構成することができます。

セッションに関しては、Burrowは見栄えが良いですが、Webアプリケーションのセッションの主流で最も単純なパターンであるOpenSessionInViewは、NHibernate 2.0.0ですぐに使用できます。つまり、データアクセスコードは、 ISessionFactory.OpenSession()ではなく、 ISessionFactory.GetCurrentSession()を呼び出します。次に、 ICurrentSessionContext の実装を指定することにより、ファクトリの現在のセッションの管理方法を指定します。 NHibernateは、Webリクエストでセッションを調整するための2つのすぐに使えるものを提供します。これは、ドキュメントでは「コンテキストセッション」として知られています。

疑いなく、より複雑なWebアプリケーションでは、複雑な遅延ロードなどを使用した会話の持続時間が長くなる可能性がありますが、標準のWebアプリケーションでは、NHibernateコンテキストセッションで十分です。

他のヒント

NHibernate / Fluent NHibernate Data Accessパターンに関するこのトピックに関する一連のブログ記事を書きました。

最初にお勧めするのは、NHibernateの相互作用を抽象化することです。

一般的で拡張可能なNHiberateリポジトリ

セッション管理を処理するために、「ビジネス会話ごとのセッション」を実装しました。 NHセッションを使用する代わりに、一連のイベントに対して存在する一般的な単一ページリクエストの存続期間中に存在するパターン。たとえば、フォームに対して一連の編集を行い、最後にすべて永久に適用するか、キャンセルします。

会話あたりPostSharpとIoCを使用したビジネストランザクション

今日この投稿を書くつもりなら、PostSharpを使用してプロジェクトのAOP(アスペクト指向プログラミング)コードを処理することはありません。 Linfu.AOP またはAOPインタラクションを行う別のフレームワーク。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top