Sql server 具有多个DbContext的事务,每个事务在实体框架上具有自己的连接
我知道它看起来像是重复的,因为在多个上下文中有大量关于事务的问题,但没有一个涉及到这种场景 设置Sql server 具有多个DbContext的事务,每个事务在实体框架上具有自己的连接,sql-server,entity-framework,azure-sql-database,transactionscope,distributed-transactions,Sql Server,Entity Framework,Azure Sql Database,Transactionscope,Distributed Transactions,我知道它看起来像是重复的,因为在多个上下文中有大量关于事务的问题,但没有一个涉及到这种场景 设置 开发机器上的SQL Server 2016(最新预览版)或生产机器上的SQL Azure v12 实体框架6.1.3 常规应用程序上的.Net 4.5 应用程序可以在Azure云服务或VM上运行,这并不重要 我们的代码是什么 单一事务范围 在TransactionScope外部创建了两个dbContext(它是由我们的依赖项注入机制创建的,与ASP.NETMVC相关联,因此为了简化示例,我省略了它)
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();
}
我们收到的
调用contextA.SaveChanges()
时抛出System.Data.Entity.Core.EntityException
,并显示以下消息:
根异常:基础提供程序在登记事务时失败
内部异常:连接当前已登记事务。完成当前事务并重试
有人知道这个样本到底出了什么问题吗
我们正在尝试使用多个上下文来创建一个事务,每个上下文都有自己的数据库连接。显然,由于每个上下文的数据位于不同的数据库服务器上(在生产环境中),我们不能使用接收DbConnection并与两个上下文共享它的DbContext ctor,因此共享DbConnection不是一个选项
非常感谢,非常感谢您的帮助。好的,SQL Azure不支持分布式事务 Azure SQL数据库现在支持使用TransactionScope的分布式事务。看 事实上你是对的。不幸的是,Azure上不支持分布式事务。谢谢