基础才是重中之重~.net中的显式事务与隐式事务
?回到目錄
.net中的事務可以分為顯式的和穩式的,顯式的就是說需要我們手動去指定事務的提交和回滾,而穩式的是.net幫助我們進行管理的,當你的事務代碼段沒有發生異常時,它會幫助我們進行提交,反之,進行事務加滾,這也是合情合理的。
以下是MSDN中的說明:
CommittableTransaction 類為應用程序使用事務提供了一種顯式方法,而不是隱式地使用 TransactionScope 類。與 TransactionScope 類不同,應用程序編寫器需要明確調用 Commit 和 Rollback 方法以提交或中止事務。但是,只有事務的創建者才能提交事務。因此,通過 Clone 方法獲得的可提交事務的副本不是可提交的。
顯式事務:
創建 CommittableTransaction 不會自動設置環境事務(環境事務是您的代碼在其中執行的事務)。可以通過調用全局 Transaction 對象的靜態 Current 屬性獲取或設置環境事務。有關環境事務的更多信息,請參見 使用事務范圍實現隱式事務 主題的“Managing Transaction Flow using TransactionScopeOption”(使用 TransactionScopeOption 管理事務流)一節。如果未設置環境事務,資源管理器上的任何操作都不屬于該事務。您需要顯式設置或重置環境事務,以確保資源管理器在正確的事務上下文中進 行操作。
在提交 CommittableTransaction 之前,事務所涉及的所有資源仍然是鎖定的。
CommittableTransaction 對象不能被重用。一經提交或回滾,就不能在事務中再次使用它或將它設置為當前環境事務上下文。
穩式事務:
在通過 new 語句實例化 TransactionScope 時,事務管理器將確定要參與哪個事務。一經確定,此范圍將始終參與該事務。此決策基于兩個因素:是否存在環境事務以及構造函數中 TransactionScopeOption 參數的值。環境事務是在其中執行您的代碼的事務。通過調用 Transaction 類的 Current 靜態屬性可獲取對環境事務的引用。有關如何使用此參數的更多信息,請參見 使用事務范圍實現隱式事務 主題的“事務流管理”一節。
如果在事務范圍中(即從初始化 TransactionScope 對象到調用其 Dispose 方法之間)未發生異常,則允許該范圍所參與的事務繼續。如果事務范圍中的確發生了異常,它所參與的事務將回滾。
當應用程序完成它要在一個事務中執行的所有工作以后,您應當只調用 Complete 方法一次,以通知事務管理器可以接受提交事務。未能調用此方法將中止該事務。
對 Dispose 方法的調用標志著該事務范圍的結束。在調用此方法之后發生的異常不會影響該事務。
如果在范圍中修改 Current 的值,則會在調用 Dispose 時引發異常。但是,在該范圍結束時,先前的值將被還原。此外,如果在創建事務的事務范圍內對 Current 調用 Dispose,則該事務將在相應范圍末尾處中止。
建立使用事務的格式為:
1 using (TransactionScope scope = new TransactionScope()) 2 { 3 try 4 { 5 //代碼段 6 scope.Complete(); 7 } 8 catch(exception) 9 { 10 throw; 11 } 12 finally 13 { 14 scope.Dispose();//手動釋放事務 15 } 16 } 17 }感謝您的閱讀。
?回到目錄
總結
以上是生活随笔為你收集整理的基础才是重中之重~.net中的显式事务与隐式事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结系列_9(Linux下常见使用总结,
- 下一篇: open***笔记