2008-12-25 46 views
1

清理一些事務性邏輯,並想知道其他人如何處理它。NHibernate事務在每個會話的開放視圖 - 建議的做法?

Ayende的建議似乎是處理服務邊界的交易。儘管這是一個ASP.NET Web應用程序,但它並沒有明確的服務邊界,至少現在不是。

人們在做什麼?

  • 在HttpModule中爲每個請求創建單個事務並處理對EndRequest的提交,回滾出錯?
  • 在應用程序中的實際「服務」中創建事務並處理多個地方?
  • 還有別的嗎?

回答

0

大多數人使用第一個要點中所述的按請求會話策略。但是,我不相信事務需要在EndRequest上提交。在許多網頁中,根據用戶操作(例如,單擊提交)來提交事務會更容易,並讓EndRequest只處理ISession。

據我所知,沒有必要創建一個HttpModule,因爲可以在global.asax中創建相同的功能:http://forum.hibernate.org/viewtopic.php?t=993041

1

您可以爲您的服務層使用IoC容器,並且容器可以管理事務和Nibenrate會話。 (A)Service Layer =>調用(B)一個或多個DAO方法/操作。

像Spring.NET這樣的IoC容器將通過(A)的例子來管理TX範圍,並將在(B)中爲您的DAO提供一個會話。提交(或回滾)將在服務層調用結束時處理。

相關問題