gpt4 book ai didi

c# - 仅用于选择数据的 TransactionScope 是否需要调用 Complete()

转载 作者:行者123 更新时间:2023-11-30 19:50:05 25 4
gpt4 key购买 nike

为了从不受脏数据影响的应用程序部分选择数据,我创建了一个 TransactionScope,它根据 Hanselman 的建议指定了一个 ReadUncommitted IsolationLevel here .

我的问题是,我是否仍然需要在 using block 的末尾执行 oTS.Complete() 调用,即使这个事务范围不是为了在插入、更新期间跨 2 个数据库桥接对象依赖关系而构建的, 还是删除?

例如:

List<string> oStrings = null;
using (SomeDataContext oCtxt = new SomeDataContext (sConnStr))
using (TransactionScope oTS = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
{
oStrings = oCtxt.EStrings.ToList();
oTS.Complete();
}

最佳答案

如果它没有更改任何数据,那么它自己不会做任何事情 - 但是是的:它应该有一个Complete(),因为围绕这个可能有一个外部事务范围。如果你的回滚,你就注定了整个外部事务。通过完成您的交易,您允许外部交易不受阻碍地继续。

请注意,在这种情况下,Complete() 无论如何都是“免费的”;事实上,SQL Server 总是优化Complete(),回滚(Dispose() 没有Complete())是昂贵的。

关于c# - 仅用于选择数据的 TransactionScope 是否需要调用 Complete(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740215/

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