你知道,爲了實現在web應用中我們經常創造的Application_BeginRequest會話和Application_EndRequest全球事件處理程序關閉它的session-per-Web的請求。然後,每次我們訪問數據庫時,都會通過GetCurrentSession獲取當前會話,而不是通過OpenSession打開新會話。我可以同時使用session-per-web-request和TransactionScope嗎?
那麼,有沒有機會在web應用程序同時使用的session-per-Web的請求和TransactionScope的?據NHibernate的3.0食譜(第117頁),它說,會議已被釋放後應該發生在調用TransactionScope.Complete。令人驚訝的是不說的這種情況雖然兩者的session-per-Web的請求和使用的TransactionScope在同一章中討論的任何單詞。
using (var scope = new TransactionScope())
{
using (var session = sessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
// do something here
}
scope.Complete();
}
是否有充分的理由使用TransactionScope而不是NHibernate Transaction? –
TransactionScope不會取代NHibernate Transaction,它會封裝事務。 –