带有 ReadCommit 标志的事务范围仍返回未提交的数据
本文关键字:返回 提交 数据 范围 ReadCommit 标志 事务 带有 | 更新日期: 2023-09-27 18:31:38
我正在使用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 已经被修改了。
你们在同一个事务中。事务隔离级别是指不同的事务。
您不能将翻译与自身隔离,而是将其他不同事务的翻译隔离开来。
尝试打开两个不同的事务范围(即同时运行两个应用程序),您将看到它们之间的操作系统隔离效果。可以同时调试两个不同的应用,并在提交范围之前暂停它们。
查看设置事务隔离级别 (事务处理 SQL)
如您所见,当解释每个事务隔离级别时,它总是引用其他事务:
读取未提交 指定语句可以读取已被其他事务修改但尚未提交的行。
已提交读取 指定语句不能读取已修改但未由其他事务提交的数据。
可重复读取 指定语句不能读取已修改但尚未由其他事务提交的数据,并且...
等等。