c#提交事務的兩種方法


1、

using (TransactionScope ts = new TransactionScope())
{
  除非顯示調用ts.Complete()方法。否則,系統不會自動提交這個事務。如果在代碼運行退出這個block后,還未調用Complete(),那么事務自動回滾了。在這個事務塊中,u.ADD()方法和t.ADD()方法內部都沒有用到任何事務類

  TransactionScopeOption設為Suppress則為取消當前區塊的事務,一般很少使用。

  對於多個不同服務器之間的數據庫操作,TransactionScope依賴DTC(Distributed Transaction Coordinator)服務完成事務一致性。

  但是對於單一服務器數據,TransactionScope的機制則比較復雜。主要用的的是線程靜態特性。線程靜態特性ThreadStaticAttribute讓CLR知道,它標記的靜態字段的存取是依賴當前線程,而獨立於其他線程的。既然存儲在線程靜態字段中的數據只對存儲該數據的同一線程中所運行的代碼可見,那么,可使用此類字段將其他數據從一個方法傳遞到該第一個方法所調用的其他方法,而且完全不用擔心其他線程會破壞它的工作。TransactionScope 會將當前的 Transaction 存儲到線程靜態字段中。當稍后實例化 SqlCommand 時(在此 TransactionScope 從線程局部存儲中刪除之前),該 SqlCommand 會檢查線程靜態字段以查找現有 Transaction,如果存在則列入該 Transaction 中。通過這種方式,TransactionScope 和 SqlCommand 能夠協同工作,從而開發人員不必將 Transaction 顯示傳遞給 SqlCommand 對象。實際上,TransactionScope 和 SqlCommand 所使用的機制非常復雜。具體可以參考文章 http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NETMattersSep.mspx?mfr=true
}

2、
var tran = DBContext.Database.BeginTransaction();
try{
  tran.Commit();

}
catch{
  tran.Rollback();
}
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM