使用TransactionScope在一个事务中使用多个数据库(多个DbContexts)。

时间:2016-07-06 23:42:18

标签: c# sql-server entity-framework entity-framework-6

我有两个DbContexts(一个模型优先,另一个是代码优先),它连接到MSSQL中的两个不同的数据库。 现在,当您从任何类调用SaveChanges时,它会使用TransactionScope类同时将数据写入两个数据库。代码如下所示。

        using (TransactionScope scope = new TransactionScope())
        {
            using (Schema1Entities db1 = new Schema1Entities())
            {
                db1.SaveChanges();
            }
            using (Schema2Entities db2 = new Schema2Entities())
            {
                db2.SaveChanges();
            }
            scope.Complete();
        }

问题在运行时引发。这是说

EntityFramework.SqlServer.dll中发生了'System.Data.Entity.Core.EntityException'类型的异常,但未在用户代码中处理

其他信息:基础提供商在Open上失败。

内部异常消息 - {“合作伙伴事务管理器已禁用其对远程/网络事务的支持。(HRESULT异常:0x8004D025)”}

打开MSDTC,没有防火墙阻止MSDTC。 立即需要帮助。

1 个答案:

答案 0 :(得分:1)

根据问题的评论,这解决了这个问题:

using (TransactionScope scope = new TransactionScope())
{
    using (Schema1Entities db1 = new Schema1Entities())
    using (Schema2Entities db2 = new Schema2Entities())
    {
        db1.SaveChanges();
        db2.SaveChanges();
    }
    scope.Complete();
}