ASP.Net アプリケーション (Web フォーム) の NHibernate のトランザクション管理に関する調査を行っています。私が見つけたほとんどの記事は、リクエストごとのトランザクション アプローチを支持する傾向があります。私はリクエストごとのセッションを理解していますが、完全に賛成です。ただし、リクエストごとのトランザクションの背後にある理由は正確にはわかりません。
私のアプリケーションは version-field を使用して並行性チェックを行います。StaleObjectException などの問題がスローされた場合、これは を呼び出すとスローされますTransaction.Commit()
。私の問題は、これがリクエストの最後にある場合、問題のあるコードが実際にどのメソッドにあったかを簡単に知ることができず、問題からロールバックするのが非常に難しいことです.
たとえば、StaleObjectException では、通常、更新されたデータを使用してメソッドを再実行するだけで済みます。
これに関するアイデアと、トランザクション管理の実践はありますか? 私は、ビジネス ロジックに基づいて、できるだけ多くのトランザクションを開くことを好みます。複数のトランザクションの問題は、実際にトランザクションを開始/終了する場所です。