2010-12-21 36 views

回答

20

由於它們是嵌套的,內部事務將回滾。

這不是全部內容,取決於您如何創建嵌套事務,但默認情況下會回滾。

This article深入瞭解TransactionScope,應該回答大部分問題。


被分配與否是無關緊要的。

+0

@Frantisek提到了分佈式事務。我如何知道即時通訊使用分佈式事務? – Tebo 2010-12-21 09:49:58

+0

我想我錯了。使用TransactionScope,你可能不需要dtc來使它工作。閱讀http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx:「雖然嵌套作用域可以加入根作用域的環境事務,但在嵌套作用域中調用Complete對根作用域沒有影響,只有從根作用域到最後一個嵌套作用域的所有作用域投票提交事務時,事務纔會被提交。「 – 2010-12-21 09:53:03

+1

我相信你知道這件事,但談論TransactionScope時,術語「內部事務」和「嵌套事務」是恕我直言,因爲實際上沒有嵌套事務,只是嵌套TransactionScopes。如果您選擇TransactionScopeOption.Required,它只是一個大事務,而使用TransactionScopeOption.RequiresNew有兩個完全獨立的事務,但它們並不嵌套在(封閉)嵌套事務的意義上。 – 2017-01-31 10:47:17

68

它取決於您使用範圍選項啓動嵌套事務處理範圍。

如果您使用默認選項TransactionScopeOption.Required,則嵌套作用域將與外部作用域在同一事務中登記,因此當外部作用域回滾內部作用域時,即使它已調用Complete也會回滾。

但是,如果您使用TransactionScopeOption.RequiresNew,則嵌套範圍將開始其自己的事務並與外部範圍分開完成,因此即使外部範圍回滾,也不會回滾。

如果您使用TransactionScopeOption.Suppress那麼嵌套作用域將不會參與外部事務並且將以非事務性方式完成,因此不構成將在外部事務回滾時回滾的工作的一部分。

+0

完美答案:) – 2017-06-14 12:06:04