2011-06-16 25 views
15

的長期主題名稱好對不起......在例外情況NHibernate的session.BeginTransaction自動回滾內使用

如果我做了以下內容:

using (var transaction = session.BeginTransaction()) 
{ 
    // do something 
    transaction.Commit(); 
} 

如果我做點什麼出現異常,它會自動回滾,還是我需要明確檢查如下:

using (var transaction = session.BeginTransaction()) 
{ 
    try 
    { 
     // do something 
     transaction.Commit(); 
    } 
    catch (Exception) 
    { 
     transaction.Rollback(); 
    } 
} 

回答

13

這是一個安全的假設,交易將是r如果提交在使用塊中失敗,則返回。

ITransaction在後臺封裝了一個ADO.NET事務,所以它取決於提供者的具體實現。我檢查的源代碼中的Dispose方法(2.1)假定在內部IDbTransaction上調用Dispose將其回滾。

+0

所以第一個代碼示例很好用?我使用SQL Server和Mysql作爲提供者(基於底層配置),所以我推測使用ADO。 – somemvcperson 2011-06-17 09:24:01

+1

第一個代碼示例很好用,如果提交失敗,將回滾事務。 – 2011-06-17 10:52:30

相關問題