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

Lar*_*ard 4 sql caching entity-framework entity-framework-5

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

我有以下电话:

 var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);
Run Code Online (Sandbox Code Playgroud)

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

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

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

示例情况:

  1. FirstOrDefault打电话,看到字段的十进制值Credits是50
  2. 第三方更改Credits为45
  3. FirstOrDefault拨打电话10秒钟,但是DbOrganisation仍然有50个积分

我究竟做错了什么?我以为FirstOrDefault默认情况下没有缓存调用?

Uri*_*iil 7

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

您可以.AsNoTracking()为您使用:

var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);
Run Code Online (Sandbox Code Playgroud)

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