首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架中的FirstOrDefault调用被缓存,但数据库被更改。

实体框架中的FirstOrDefault调用被缓存,但数据库被更改。
EN

Stack Overflow用户
提问于 2014-06-21 09:22:43
回答 1查看 4.7K关注 0票数 6

我有一个奇怪的问题,这是我从未经历过的。我使用实体框架检索我的记录。

我有以下电话:

代码语言:javascript
复制
 var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);

我希望这个调用没有缓存。因此,当我进行这个调用时,我希望它能够查询数据库并检索最新的DbOrganisation对象。但事实并非如此。

我称这种方法为两次相对较短的相交后时间(~5-10秒)。但是在这段时间内,这个表中的十进制值可以被某个第三方更改。

但是,即使值发生变化,FirstOrDefault调用也会检索未更新的版本。

示例情景

  1. 我进行FirstOrDefault调用,并看到字段Credits的十进制值为50。
  2. 第三方将Credits更改为45
  3. 我让FirstOrDefault调用10秒,但DbOrganisation仍然有50个学分

我做错什么了?我认为FirstOrDefault调用在默认情况下不是缓存的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 09:27:38

你把一切都做对了,这就是EF的工作原理。

您可以将.AsNoTracking()用于您的目的:

代码语言:javascript
复制
var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);

DbExtensions.AsNoTracking法:返回一个新的查询,其中返回的实体不会缓存在DbContext或ObjectContext中。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24340207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档