我试图在单个事务中同时实现DbContext
(SQLDBContext
和DB2Context
),但是每次都遇到与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();
}
谢谢!