1. 首页>
  2. 技术文章>
  3. MSDTC在MSSQL2008不升级为分布式事务而2005却是

MSDTC在MSSQL2008不升级为分布式事务而2005却是

2/13/18 7:58:13 PM 浏览 1180 评论 0

MSDTC 分布式事务

在EntityFramework中,对于sql2008已经很好的支持了transactionscope,而对于sql2005来说,支持的不是很好,它将多个savechanges()方法提升为分布式事务msdtc,它不管你是否为一个数据库,真是无奈了!还好,最好找到了解决方法,下面图所示,将多个insert,update包裹到一个transactionscope里,所产生的结果如下:

var objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)Db).ObjectContext;            
try
{
        objectContext.Connection.Open();                
        using (TransactionScope trans = new TransactionScope())
        {
                insert1();
                insert2();
        }
}  
catch (Exception)
{            
    throw;
} 
finally
{
    objectContext.Connection.Close();
 }

简单来说,就是sp_reset_connection重新使用一次SQL链接时,你的事务里的代码是被包裹在一起发送过来的,这时,如果有一条SQL语句出现异常,整个包会发生callback!

上面图中,只要有一条语句出现SQL异常,都会发生回滚,从而保证了数据的完整性。

当然,我们的计算机中,并没有开启msdtc服务


网友讨论