web-dev-qa-db-ja.com

NHibernateトランザクションのベストプラクティス

Nhibernate についてしばらく読んでいて、実装しているサイトで使用しようとしています。 NHibernateのベストプラクティスについて Billy McCaffertyによる記事 を読みましたが、トランザクションを処理するのに最適な場所については何も示されていませんでした。

そのコードをデータアクセスオブジェクト(DAO)に入れることを考えましたが、複数のDAOが使用されている場合の処理​​方法がわかりません。 NHibernateアプリケーションにトランザクションコードを配置するのに最適な場所はどこですか?

32
Ramiro

それは本当にあなたの環境に依存します。たとえば、ASP.Netサイトで Open-Session-In-View (Javaリンクですが、パターンは.Netでも同じです)パターンを使用し、セッションとトランザクションを制御するためにHttpModuleを使用します。 HttpModuleは、BeginRequestイベントでセッションを開き、トランザクションを開始してから、トランザクションをコミットし、EndRequestイベントでセッションを閉じます。

異なる環境と通信パターンは、異なるセッション/トランザクション管理戦略につながります。

NHibernate Users Group だけでなく、一般的なWebでも、さまざまな戦略について多くの議論があります。

10
Sean Carpenter

Ayendeに基づくと、検索を含め、すべてのトランザクションを明示的に追加する必要があります。こちらを確認してください: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions

11
Liang Wu

最も簡単な方法は、で説明されているスマートトランザクションを使用することです。

http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html

一般的なNHibernateSessionManagerを使用し、親ロジックとサブロジックがトランザクションを処理していることを気にせずに、「必要なときにトランザクションを開く」ことを保証する単純なクラスが作成されます。

0
Yogee