我有一个奇怪的问题,我以前没有经历过。我使用Entity Framework来检索我的记录。
我有以下电话:
var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);
我希望不会缓存此次通话。因此,当我进行此调用时,我希望它可以查询数据库并检索最新的DbOrganisation
对象。但事实并非如此。
我在相互之后相对较短的时间(约5-10秒)将这种方法称为相对两次。但在此期间,此表中的十进制值可由某些第三方更改。
但是,即使值发生更改,FirstOrDefault
调用也会检索未更新的版本。
示例情况:
FirstOrDefault
调用,并查看字段Credits
的小数值,为50 Credits
更改为45 FirstOrDefault
电话,但DbOrganisation
仍然有50个积分我做错了什么?我认为FirstOrDefault
调用默认没有缓存?
答案 0 :(得分:7)
你做的一切都是正确的,这就是EF的运作方式。
您可以将.AsNoTracking()
用于:
var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);
DbExtensions.AsNoTracking Method:返回一个新查询,其中返回的实体不会缓存在DbContext或ObjectContext中。