实体框架中的FirstOrDefault调用已缓存但数据库已更改

时间:2014-06-21 09:22:44

标签: sql entity-framework caching entity-framework-5

我有一个奇怪的问题,我以前没有经历过。我使用Entity Framework来检索我的记录。

我有以下电话:

 var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);

我希望不会缓存此次通话。因此,当我进行此调用时,我希望它可以查询数据库并检索最新的DbOrganisation对象。但事实并非如此。

我在相互之后相对较短的时间(约5-10秒)将这种方法称为相对两次。但在此期间,此表中的十进制值可由某些第三方更改。

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

示例情况

  1. 我进行FirstOrDefault调用,并查看字段Credits的小数值,为50
  2. 第三方将Credits更改为45
  3. 我在10秒之后拨打FirstOrDefault电话,但DbOrganisation仍然有50个积分
  4. 我做错了什么?我认为FirstOrDefault调用默认没有缓存?

1 个答案:

答案 0 :(得分:7)

你做的一切都是正确的,这就是EF的运作方式。

您可以将.AsNoTracking()用于:

var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);

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