为什么实体框架不对我的第二个查询使用ReadUncommitted?

时间:2019-05-27 10:23:54

标签: c# entity-framework-6

我们正在使用Entity Framework 6,并正在使用异步查询数据库。

我们还有一个集成测试,用于运行代码并为此设置;

  • 测试在事务中运行,即我们以begin开始运行,并以回滚结束
  • 数据是在查询之前设置的
  • 所有操作都针对同一个dbContext
  • IsolationLevel设置为ReadUncommitted

代码:

var table1Id = await _dbContext.Table1.Where(x => x.IdentificationNumber == identificationNumber)
        .Select(y => y.Id)
        .SingleOrDefaultAsync().ConfigureAwait(false);

var table2Id = await _dbContext.Table2.Where(y => y.Table1Id == table1Id)   
        .Select(y => y.Id)
        .FirstOrDefaultAsync().ConfigureAwait(false);

//Code continues...

使用T-SQL和NOLOCK提示在SSMS中读取数据库会在表中显示数据。

运行我的代码会执行两个查询;第一个正确运行,并按预期方式返回table1Id,但第二个未返回任何值。看来连续两次通话不起作用?如果我切换顺序,它将是table1Id,不会以任何值启动。

如果我不使用异步/等待,那么它也可以工作。

有人对此行为有很好的解释吗?我做错了吗?

0 个答案:

没有答案