2010-08-18 23 views
3

在我的Web應用程序中,會話是在BeginRequest處理程序中創建的。所有數據庫操作都是針對此會話執行的。在EndRequest處理程序中,會話用於創建一個隨後被提交的事務。之後,會議處理完畢。這會將針對會話執行的所有數據庫操作包裝到單個事務中。當使用NHibernate和每個請求單元的工作單元時,在每種請求中使用多個事務會有什麼好處?

當是它有利於創建要請求事務中提交的事務?這是如何完成的?

換句話說,是什麼原因我會比提交所有在當前請求執行的數據庫操作之外的任何目的創建事務?

回答

1

當用戶訪問一個頁面,你想各種各樣的事情登錄到數據庫 - 點擊頁面等,這可以愉快地在同一會話發生,但你想要的頁面跟蹤刷新到數據庫中,即使隨後出現錯誤。

出於性能方面也一樣,你會想握住你打開的事務儘可能短的時間儘可能。在您的請求期間,您可能會執行大量非基於數據庫的操作,在此期間沒有理由保持交易處於開放狀態。

很多其他的例子......

0

我個人不這樣做是對的錯誤處理的原因很簡單,這樣的粉絲。如果你的transaction.Commit在你的主Action/Request/Whatever上失敗了,你就沒有背景知道發生了什麼。然後您將用戶留給一些蹩腳的錯誤頁面或類似的東西。如果您正在執行Web服務,那麼您可能會返回指示內部錯誤或類似內容的結果代碼,尤其如此。

我發現我通常每個調用都有一個業務事務,因此,我讓我的應用服務管理事務,並讓BeingRequest處理打開會話和EndRequest以刷新會話並處理。

我在EndRequest上刷新的原因是爲了處理可能在事務邊界外發生的任何數據庫活動,但是,如果您有一個用於在所有站點/服務中處理此事件的組件,則情況更是如此。

相關問題