我有一个奇怪的问题,这是我从未经历过的。我使用实体框架检索我的记录。
我有以下电话:
var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);我希望这个调用没有缓存。因此,当我进行这个调用时,我希望它能够查询数据库并检索最新的DbOrganisation对象。但事实并非如此。
我称这种方法为两次相对较短的相交后时间(~5-10秒)。但是在这段时间内,这个表中的十进制值可以被某个第三方更改。
但是,即使值发生变化,FirstOrDefault调用也会检索未更新的版本。
示例情景
FirstOrDefault调用,并看到字段Credits的十进制值为50。Credits更改为45FirstOrDefault调用10秒,但DbOrganisation仍然有50个学分我做错什么了?我认为FirstOrDefault调用在默认情况下不是缓存的?
发布于 2014-06-21 09:27:38
你把一切都做对了,这就是EF的工作原理。
您可以将.AsNoTracking()用于您的目的:
var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);DbExtensions.AsNoTracking法:返回一个新的查询,其中返回的实体不会缓存在DbContext或ObjectContext中。
https://stackoverflow.com/questions/24340207
复制相似问题