我知道它看起来像是重复的,因为关于多个上下文的交易存在大量问题,但没有一个涉及这种情况。
当我们做类似的事情时:
var contextA = new ContextA();
var contextB = new ContextB();
using(var scope = new TransactionScope())
{
var objA = new EntityA();
objA.Name = "object a";
contextA.EntitiesA.Add(objA);
contextA.SaveChanges();
var objB = new EntityB();
objB.Name = "object B";
contextB.EntitiesB.Add(objB);
contextB.SaveChanges();
scope.Complete();
}
在System.Data.Entity.Core.EntityException
的电话中抛出contextA.SaveChanges()
,并显示以下消息:
根例外:基础提供商在EnlistTransaction上失败。
内部异常:连接目前已登记交易。完成当前事务并重试。
所以,任何人都知道这个样本到底出了什么问题?
我们正在尝试使用多个上下文和每个上下文与数据库建立自己的连接。显然,由于每个上下文的数据都在不同的数据库服务器上(在生产中),我们不能使用接收DbConnection并与两个上下文共享它的DbContext ctor,因此共享DbConnection不是一种选择。
非常感谢,非常感谢您的帮助。
答案 0 :(得分:1)
AFAIK,SQL Azure不支持分布式事务。 Source
答案 1 :(得分:1)
Azure SQL数据库现在支持使用TransactionScope的分布式事务。见TransactionScope() in Sql Azure。