2010-04-09 65 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