【发布时间】:2019-05-26 21:34:28
【问题描述】:
在 .NET 中,当我们使用 TransactionScope 时,我们可以在多个连接之间共享同一个事务。
using(TransactionScope tran = new TransactionScope()) {
//this method open a new connection
CallAMethodThatDoesSomeWork();
//this method open another new connection
CallAMethodThatDoesSomeMoreWork();
tran.Complete();
}
考虑到事务需要特定连接才能在数据库中运行,我无法理解这怎么可能。
它是如何工作的?我认为也许物理连接总是相同的。这可能吗?
更新:假设所有连接的连接字符串都是相同的,即我不使用不同的数据库,总是相同的......
【问题讨论】:
-
我忘了提到我正在使用相同的连接(相同的数据库,相同的连接字符串)。
-
没关系。我不假装理解它,但 DTC 负责登记交易和处理投票,还有更多的魔法。如果您熟悉 Windows Communication Foundation,您甚至可以在事务中加入服务调用层! DTC 并非特定于 SQL Server。
-
您阅读以下内容了吗? docs.microsoft.com/en-us/dotnet/framework/data/transactions 这是一个很好的起点。
-
@Crowcoder 为了完整性 - “轻量级事务管理器” (LTM) 可能能够处理其中的一些问题,而不是涉及 DTC,特别是如果所有内容都转到同一台服务器(相同的连接字符串和域帐户)。这也可能取决于它们是顺序的还是并发的。
标签: c# .net ado.net connection transactionscope