我有一个奇怪的问题,我以前没有遇到过。我使用实体框架来检索我的记录。
我有以下电话:
var dbOrganisation = repository.DbOrganisation.FirstOrDefault(c => c.Id == id);
我预计不会缓存此调用。因此,当我拨打此电话时,我希望它查询数据库并检索最新的DbOrganisation
目的。但事实并非如此。
我在相对较短的时间内(约 5-10 秒)调用此方法两次。但在此期间,该表中的十进制值可以被某些第三方更改。
然而,即使值发生变化,FirstOrDefault
调用检索未更新的版本。
示例情况:
- 我做的
FirstOrDefault
调用,并查看该字段的十进制值Credits
, is 50
- 第三方改变了
Credits
to 45
- 我做的
FirstOrDefault
10秒后打电话,但是DbOrganisation
仍有 50 个积分
我究竟做错了什么?我以为FirstOrDefault
默认情况下不缓存调用?
你做的一切都是正确的,这就是 EF 的工作原理。
您可以使用.AsNoTracking()
为了您的目的:
var dbOrganisation = repository.DbOrganisation.AsNoTracking().FirstOrDefault(c => c.Id == id);
DbExtensions.AsNoTracking 方法 http://msdn.microsoft.com/en-us/library/gg679352%28v=vs.103%29.aspx:返回一个新查询,其中返回的实体不会缓存在 DbContext 或 ObjectContext 中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)