.net core 避免在连接到同一SQL server、.net核心上的多个数据库时发生分布式转换

.net core 避免在连接到同一SQL server、.net核心上的多个数据库时发生分布式转换,.net-core,transactionscope,distributed-transactions,.net Core,Transactionscope,Distributed Transactions,我们正在将一个项目从.NET Framework迁移到.NET Core,该项目正在使用同一SQL server上的多个数据库。在过去,我们使用一个事务作用域来处理我们希望在发生错误时回滚的任何事务 当事务涉及多个DBs时,事务将升级为分布式事务,这在.NET Core中不受支持 问题是,如果所有数据库实际上都在同一台服务器上,如果我将使用“跨数据库查询”,就像在本文最后一部分中建议的那样,我是否会被保险不受这种情况的影响 “跨数据库查询”是否只是指运行原始SQL命令,如: using(Tran

我们正在将一个项目从.NET Framework迁移到.NET Core,该项目正在使用同一SQL server上的多个数据库。在过去,我们使用一个事务作用域来处理我们希望在发生错误时回滚的任何事务

当事务涉及多个DBs时,事务将升级为分布式事务,这在.NET Core中不受支持

问题是,如果所有数据库实际上都在同一台服务器上,如果我将使用“跨数据库查询”,就像在本文最后一部分中建议的那样,我是否会被保险不受这种情况的影响

“跨数据库查询”是否只是指运行原始SQL命令,如:

using(TransactionScope scope = new TransactionScope())
{
    var connection = new SqlConnection(connectionString);
    connection.Open();

    var SqlComm1 = new SqlCommand("Insert into TableA...", connection);
    SqlComm1 .ExecuteNonQuery();

    var SqlComm2 = new SqlCommand("Insert into [DB2].[dbo].[TableB]...";
    SqlComm2 .ExecuteNonQuery();
    .
    .
}
如果没有,我可以得到一个代码示例,它实际上是什么


最后,在使用“跨数据库查询”时,我可以利用实际数据库上下文中的任何内容吗?像连接、数据库集或任何东西,如果是,如何进行?

链接答案模拟两阶段提交(没有DTC或XA通常提供的保证),手动完成所有连接上的所有分布式工作,而不提交任何连接,然后在最后完全提交。不需要在同一台服务器上。DbContext可能很棘手,因为SaveChanges在其自己的事务下完成所有工作。你也会想要控制txn。我指的是链接答案中的最后一句话,而不是他给出的代码示例中提出的内容。我相信David Bowne指的是,也就是说,可以建立到服务器的单一连接,例如,通过使用3部分点表示法
database.schema.table
可以在同一事务上对多个数据库执行更新。从技术上讲,这仍然是一个分布式事务,但根据link,它不需要DTC,所以您可以在核心中解决这个问题。您可能希望了解您是否正在使用SQL Azure。链接答案模拟了两阶段提交(没有DTC或XA通常提供的保证),即手动完成所有连接上的所有分布式工作,而不提交任何连接,然后在最后完全提交。不需要在同一台服务器上。DbContext可能很棘手,因为SaveChanges在其自己的事务下完成所有工作。你也会想要控制txn。我指的是链接答案中的最后一句话,而不是他给出的代码示例中提出的内容。我相信David Bowne指的是,也就是说,可以建立到服务器的单一连接,例如,通过使用3部分点表示法
database.schema.table
可以在同一事务上对多个数据库执行更新。从技术上讲,这仍然是一个分布式事务,但根据link,它不需要DTC,所以您可以在核心中解决这个问题。如果您使用的是SQLAzure,您可能需要进行探索。