具有多个连接的事务范围

时间:2011-10-05 20:28:16

标签: entity-framework transactions transactionscope

如果在任何阶段出现错误,我有一个需要回滚所有更新和插入的进程。所以我想使用TransactionScope类来实现这一目标。这是我的代码:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
    IWE dbContext1 = null;

    using (dbContext1 = new IWE())
    {
        dbContext1.Connection.Open();

        //make some changes using the dbContext1

        //Save Changes but don't discard yet
        dbContext1.SaveChanges(false);

       //make a call to another database
       using (EPE context = new EPE())
       {

          //add or makes some changes
          context.SaveChanges(false);
       }
    }


    //if there were no problems above committ the transaction
    if (success)
    {
         ////if we get here things are looking good.
         scope.Complete();

         //accept the changes above against these connections.
         dbContext1.AcceptAllChanges();
    }
}

问题是,一旦我调用第二个连接,我就会收到错误:

  

“分布式事务管理器(MSDTC)的网络访问已经完成   禁用。请在安全性中启用DTC以进行网络访问   使用组件服务管理的MSDTC配置   工具“。

我已检查过以确保在两台服务器上都启用了MSDTC。或者至少看起来如此。

其他信息: - 他们之间没有防火墙 - 第一个数据库服务器运行Windows Server 2003 R2 w / sql 2005 - 第二个DB服务器正在运行Windows Server 2003 w / sql 2000

任何人都可以使用交易范围w /或使用分布式交易来指向正确的方向吗?

提前致谢, 比利

1 个答案:

答案 0 :(得分:1)

在尝试使分布式事务工作的时间很长时间后,我最终以不同的方式进行此操作。

我的解决方案是只使用一个连接。所以我在第一个DB上创建了一个视图,该视图映射到我需要插入的第二个DB(不同的服务器)上的数据库表。我将该视图导入到我的实体模型以及所有三个存储过程cud语句(仅使用insert但需要所有这些)并相应地将它们映射到实体对象。

之后,一切都按照单一连接进行。