2010-04-09 46 views
2

Sql Azure在執行插入時是否支持使用TransactionScope()?以下是我正在嘗試執行的代碼片段。Sql Azure中的TransactionScope()

using (var tx = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted })) 
      { 
       using (var db = MyDataContext.GetDataContext()) 
       { 
        try 
        { 
         MyObject myObject = new MyObject() 
         { 
         SomeString = "Monday" 

         }; 
         db.MyObjects.InsertOnSubmit(myObject); 
         db.SubmitChanges(); 
         tx.Complete(); 
        } 
        catch (Exception e) 
        { 
        } 
       } 
      } 

回答

3

我的理解是,它適用於事務範圍僅與一個連接綁定的情況。很多時候,因爲它是一種最早的開放式關係的最佳實踐。可能會出現範圍跨越兩個連接的情況。 sql azure不支持這些場景。

一個可能無法使用的例子是:以年爲例;假設MyDataContext.GetDataContext()返回一個新的連接實例。

using (var tx = new TransactionScope(TransactionScopeOption.RequiresNew, 
             new TransactionOptions() 
              { IsolationLevel = IsolationLevel.ReadCommitted } 
             )) 
    { 
     try{ 
      DoSomething(); //a method with using (var db = MyDataContext.GetDataContext()) 
      DoSomethingElse(); //another method with using (var db = MyDataContext.GetDataContext()) 
      tx.Complete(); 
     } 
     catch { //Exception handler 
     } 
    } 

這些鏈接應該給你一些指點藏漢

+0

第一個鏈接看起來已經死了。 – 2013-09-23 15:47:23

2

快速更新與Azure的SQL數據庫的分佈式事務:分佈式事務的前兩天,我們推出支持在Azure SQL數據庫中。該功能點亮了功能稱爲彈性數據庫事務。它專注於使用.NET分佈式事務API(如TransactionScope)的方案。一旦安裝了.NET框架的新4.6.1版本,這些API就開始針對Azure SQL數據庫開展工作。您可以在這裏找到更多關於如何開始使用的信息:https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-transactions-overview/

請試試吧!

+0

您好Torsten,這是否意味着我們可以在同一範圍內使用一個圍繞ef到sql azure的事務範圍和周圍的服務總線? – Dewy 2016-02-03 22:17:53

+0

@Dewy:不幸的是,你不能在相同的範圍內編寫SQL Azure和Azure SB。 – 2016-05-25 02:13:36