gpt4 book ai didi

c# - 像 'TransactionScope' 这样的代码如何工作?

转载 作者:太空狗 更新时间:2023-10-30 00:31:16 25 4
gpt4 key购买 nike

我正在阅读 C# 中的事务作用域,它是这样工作的:

using (connectionDb)
{
connectionDb.Open();
using (var ts = new System.Transactions.TransactionScope())
{ <--
try
{
connectionDb.ExecuteNonQuery();
ts.Complete();
}
catch (Exception)
{
throw;
}
finally
{ }
} <--
}

using 括号中的每个子句都在同一个事务中工作,但我不明白代码如何识别数据库命令正在范围内运行而没有传递事务范围参数,既没有打开连接,也没有在执行查询。

例如,如果我有以下代码:

var myObject = new MyObject();
var childObject = new ChildObject();
childObject.Foo(myObject);
childObject.Bar(myObject);

我可以为变量 myObject 创建一个作用域,并在不通过参数传递给她的情况下将其用于 childObject 方法吗?像这样:

using(var myObject = new MyObject())
{
childObject.Foo(); -- Here the method use the variable myObject
childObject.Bar(); -- Here the method use the variable myObject
}

最佳答案

当您创建一个 TransactionScope 时,它​​存储在静态变量 Transaction.Current 中,该变量保存在线程本地存储中。与事务交互的方法查看此变量以确定它们所在的事务。这称为环境事务。

关于c# - 像 'TransactionScope' 这样的代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com