无法修复 MSDTC 错误

Not able to fix MSDTC error

我正在使用 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-Settings?也许你不 "Allow Remote Clients"。如果在 search-field(在 windows => 开始)中输入 dcomcnfg,就可以进行这样的设置。之后组件服务应该打开。之后,转到组件服务 => 计算机 => 我的电脑 => 分布式事务协调器 => [Your_DTC]。在 DTC,您可以打开一个 properties-page,您可以在其中更改(例如)安全设置。检查 "Allow Remote Clients" 可能会解决您的问题。如果没有,请尝试一些其他设置..

我会推荐一些关于 Whosebug 的问题:MSSQL Error 'The underlying provider failed on Open' and How to run two Entity Framework Contexts inside TransactionScope without MSDTC?

您说过:

I'm not getting error When I'm using single dbContext, above error only coming with multiple DbContext

这种行为的原因很清楚:TransactionScope 帮助您处理事务。 Microsoft 默认提供两个 Transaction-Managers:用于 "easy" 事务的 LTM(轻量级事务管理器)和用于分布式事务的 DTC。如果事务满足某些条件,MS 会自动将事务升级为 DTC。一个标准是对两个不同数据库的事务访问。所以如果你想 "workaround" 你的问题,如果可能的话,你可以尽量避免在一个事务中访问多个数据库。由于此修改,您的事务将不再升级到 MS DTC。