C# 了解TransactionScope和SQL连接

C# 了解TransactionScope和SQL连接,c#,.net,ado.net,connection,transactionscope,C#,.net,Ado.net,Connection,Transactionscope,在.NET中,当我们使用TransactionScope时,我们可以跨多个连接共享同一事务 using(TransactionScope tran = new TransactionScope()) { //this method open a new connection CallAMethodThatDoesSomeWork(); //this method open another new connection CallAMethodThatDoesSomeMoreWo

在.NET中,当我们使用TransactionScope时,我们可以跨多个连接共享同一事务

using(TransactionScope tran = new TransactionScope()) { 
  //this method open a new connection
  CallAMethodThatDoesSomeWork(); 
  //this method open another new connection
  CallAMethodThatDoesSomeMoreWork(); 
  tran.Complete(); 
}
考虑到一个事务需要一个特定的连接才能在数据库中运行,我无法理解这是怎么可能的

它是如何工作的?我想也许物理联系总是一样的。这可能吗


更新:假设所有连接的连接字符串都相同,即我不使用不同的数据库,总是相同的…

多亏了这些注释,我才能够找到答案

当我们使用TransactionScope时,我们可以跨多个连接共享同一事务,因为该事务已转换为分布式事务;分布式事务协调器(DTC)发挥了神奇的作用

通常,即使连接到同一数据库,TransactionScope也会升级到DTC


该规则的例外情况可能是,我们不同时打开和关闭同一数据库的不同连接;但这并不是所有数据库引擎都支持的。

通过的魔力,我忘了提到我使用的是相同的连接(相同的数据库,相同的连接字符串)。这并不重要。我并不假装很了解它,但DTC负责登记事务和处理投票,还有更多的魔力。如果您熟悉Windows通信基础,您甚至可以在事务中加入服务调用层。DTC不是特定于SQL Server的。您是否阅读了以下内容?这是一个很好的起点。@Crowcoder为了完整性,“轻量级事务管理器”(LTM)可能能够处理其中的一些问题,而不是涉及DTC,尤其是当所有内容都要到同一台服务器(相同的连接字符串和域帐户)时。这也可能在一定程度上取决于它们是连续的还是并发的。