gpt4 book ai didi

c# - 带有 ReadCommited 标志的 TransactionScope 仍然返回未提交的数据

转载 作者:行者123 更新时间:2023-11-30 22:29:28 25 4
gpt4 key购买 nike

我正在使用 TransactionScope 来管理 EF 中的事务,我需要一个 ReadCommited 行为,但它没有按预期工作:

using (var trans = new TransactionScope(TransactionScopeOption.Required, 
new TransactionOptions()
{ IsolationLevel = IsolationLevel.ReadCommitted}))
{
var c1 = customerRepository.Get(1);
c1.FirstName = "Modified";
customerRepository.Save();

var c2 = customerRepository.Get(1);
Assert.AreNotEqual("Modified", c2.FirstName);

trans.Complete();
}

虽然我在获取第二个实例时仍未提交事务,但它的 FirstName 已被修改。

最佳答案

您在同一笔交易中。事务隔离级别是指不同的事务。

您不能将翻译与其本身隔离开来,而是与其他不同的交易隔离开来。

尝试打开两个不同的事务范围(即同时运行两个应用程序),您会看到它们之间隔离的效果。您可以同时调试两个不同的应用程序,并在提交范围之前暂停它们。

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

如您所见,在解释每个事务隔离级别时,它总是引用其他事务:

READ UNCOMMITTED Specifies that statements can read rows that have been modified by other transactions but not yet committed.

READ COMMITTED Specifies that statements cannot read data that has been modified but not committed by other transactions.

REPEATABLE READ Specifies that statements cannot read data that has been modified but not yet committed by other transactions and ...

等等。

关于c# - 带有 ReadCommited 标志的 TransactionScope 仍然返回未提交的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200348/

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