MSDTC和多个EF ObjectContexts分隔SQL Server数据库

时间:2012-12-07 23:11:53

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

我遇到使用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();
    }
}

0 个答案:

没有答案