Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法修复MSDTC错误_C#_Entity Framework_Ef Code First_Transactionscope - Fatal编程技术网

C# 无法修复MSDTC错误

C# 无法修复MSDTC错误,c#,entity-framework,ef-code-first,transactionscope,C#,Entity Framework,Ef Code First,Transactionscope,我正在使用TransactionScope来维护2个数据库之间的事务。我使用2个不同的DbContext创建了2个数据库,但第二个数据库出现错误 SaveChanges()方法调用。我已经启动了MSDTC(分布式事务协调器)和相关服务,但仍然出现错误 using (var transaction = new TransactionScope(TransactionScopeOption.Required)) { using (var employeeCon

我正在使用TransactionScope来维护2个数据库之间的事务。我使用2个不同的DbContext创建了2个数据库,但第二个数据库出现错误 SaveChanges()方法调用。我已经启动了MSDTC(分布式事务协调器)和相关服务,但仍然出现错误

using (var transaction = new TransactionScope(TransactionScopeOption.Required))
        {
            using (var employeeContext = new EmployeeDbContext())
            {
                var newEmployee = new Employee { Id = 1, Name = "Pankaj" };
                employeeContext.Employee.Add(newEmployee);
                using (var orderContext = new OrderDbContext())
                {
                    var newOrder = new Order { EmployeeId = 1, OrderId = 1, OrdreName = "Test", Amount = 100 };
                    orderContext.Order.Add(newOrder);

                    employeeContext.SaveChanges();
                    orderContext.SaveChanges();//getting error here
                    transaction.Complete();
                }
            }

        }


当我使用单个dbContext时,我没有收到错误,上面的错误只出现在多个dbContext中

我不知道您是否仍在寻找解决方案-但是如果:您是否尝试更改MS DTC设置?也许你不“允许远程客户端”。如果在搜索字段中输入dcomcnfg(在windows=>Start时),则可以进行此类设置。之后,组件服务应该打开。然后转到组件服务=>Computer=>My Computer=>Distributed Transaction Coordinator=>[Your_DTC]。在故障诊断码处,您可以打开一个属性页,在那里您可以更改(例如)安全设置。选中“允许远程客户端”可能会解决您的问题。如果没有,请尝试其他设置

我会推荐一些问题:和

你说过:

当我使用单个dbContext时,我并没有遇到错误,上面的错误只会伴随多个dbContext出现


这种行为的原因很清楚:TransactionScope帮助您处理事务。Microsoft默认提供两个事务管理器:用于“轻松”事务的LTM(轻量级事务管理器)和用于分布式事务的DTC。如果交易符合某些标准,MS会自动将交易升级到DTC。一个标准是对两个不同数据库的事务访问。因此,如果您想“解决”您的问题,并且如果这是可能的,您可以尝试在一个事务中避免多个数据库访问。由于此修改,您的交易将不再升级到MS DTC。

这里还有一个stackoverflow问题,可以帮助您完善,请为我效劳。首先,我按照上述步骤,使用“网络服务”帐户运行MSDTC和从属服务器。现在我的交易正常运行:)非常感谢@Joshit