繁体   English   中英

如何使用上下文SQL DB和DB2在Entity Framework 5中实现单个事务

[英]How to implement single transaction in Entity Framework 5 with both context SQL DB and DB2

我试图在单个事务中实现两个DbContextSQLDBContextDB2Context ),但是每次都遇到与DB2相关的问题。

它可以很好地与SQL配合使用,但是在尝试访问DB2时会引发错误。

例外是:

DB2Entities getter中的错误。与基础事务管理器的通信失败。

由于通信问题,MSDTC事务管理器无法从源事务管理器中提取事务。 可能的原因是:存在防火墙,并且MSDTC进程没有例外;两台计算机无法通过其NetBIOS名称相互找到对方;或者未为两个事务管理器之一启用对网络事务的支持。 (来自HRESULT的异常:0x8004D02B)

请帮助我在单个“事务”下实现两个数据库事务,或者如果其中一个失败,则两个事务都应回滚。

代码就像:

var option = new TransactionOptions
{
    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
    Timeout = TimeSpan.FromSeconds(60)
};

using (var scopeOuter = new TransactionScope(TransactionScopeOption.Required, option))
{
    SQLDBContext.Table.AddSomething();
    SQLDBContext.SaveChanges();

    using (var scopeInner = new TransactionScope(TransactionScopeOption.Required, option))
        {
                DB2Context.Table.AddSomething();
                DB2Context.SaveChanges();
                scopeInner.Complete();
        }
       scopeOuter.Complete();
}

谢谢!

使用DB2,您将必须为MSDTC启用XA事务。 由于您还使用多个数据库,因此可能还必须启用“网络DTC访问”(请参见下图)。

要更改这些设置,请打开“组件服务”管理管理单元(“管理工具”->“组件服务”,或运行comexp.msc )。 然后在“计算机”->“我的电脑”->“分布式事务处理协调器”下,右键单击“本地DTC”,然后单击属性。 您将在下面看到屏幕。

MSDTC配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM