使用事务范围在一个事务中有多个数据库(多个数据库上下文)

本文关键字:数据库 事务 上下文 范围 一个 | 更新日期: 2023-09-27 17:55:40

我有两个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();
        }

在运行时会引发此问题。它是说

类型为"System.Data.Entity.Core.EntityException"的异常 发生在 EntityFramework.SqlServer 中.dll但未在用户中处理 法典

其他信息:基础提供程序在打开时失败。

内部异常消息 - {"合作伙伴事务管理器具有 禁用了对远程/网络事务的支持。(例外情况 结果: 0x8004D025)"}

已打开 MSDTC

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

使用事务范围在一个事务中有多个数据库(多个数据库上下文)

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

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