1

我在使用 TransactionScope 时遇到问题,其中初始化了两个 Entity Framework ObjectContexts,一个用于数据库 X,一个用于同一服务器上的数据库 Y。

第一个上下文“cersCtx”创建了一个新的“Contact”对象。第二个上下文“coreCtx”试图找到一个帐户。

在第二个上下文中调用以查找帐户

account = coreCtx.Accounts.SingleOrDefault(p => p.Email == email && !p.Voided);

我收到以下错误:

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

奇怪的是,当我进入 MSDTC 时,我看到有已提交的事务,但大多数情况下它们正在中止。

有人对我如何解决这个问题有任何想法吗?

这是产生此问题的代码的缩写示例。

public void CreateContact(string email)
{
    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }))
    {
            using (CERSEntities cersCtx = new CERSEntities())
            {
                Contact contact = new Contact();
                contact.Email = email;
                cersCtx.Contacts.AddObject(contact);
                cersCtx.SaveChanges();
            }

            CoreModel.Account account = null;
            using (CoreModel.CoreEntities coreCtx = new CoreModel.CoreEntities())
            {
                account = coreCtx.Accounts.SingleOrDefault(p => p.Email == email && !p.Voided);
            }

            scope.Complete();
    }
}
4

0 回答 0