实体框架使用AsNoTracking返回不同的结果

时间:2017-12-22 13:48:15

标签: oracle entity-framework linq

我将Entity Framework与Oracle数据库结合使用。如果我创建像

这样的查询
myLinqStatement.ToListAsync()

结果返回错误的数据。如果我将语句更改为

myLinqStatement.AsNoTracking.ToListAsync()

我得到了正确的数据。

我还检查了由myLinqStatement.ToListAsync()生成的本机SQL查询。生成的SQL查询是正确的,因为我得到了正确的数据。

映射中是否存在问题?为什么它与AsNoTracking一起使用?

谢谢!

1 个答案:

答案 0 :(得分:2)

AsNoTracking做的是检索数据而不将其附加到上下文,因此您对数据应用的任何更改都不会生效,除非您再次附加它以便EF知道它应该跟踪其更改。 / p>

从您创建上下文的那一刻起,您提供的代码片段不会显示整个图片,但是在您调用myLinqStatement.ToListAsync()之前,代码的其他部分是否可能会改变数据?

正如你提到myLinqStatement.AsNoTracking.ToListAsync()返回预期的数据,让我假设你的代码中有一些副作用AsNoTracking根本不知道所以只返回它在db中找到的任何内容