我的 Entity Framework 支持的项目在选择整个实体时返回过时的数据,但在仅从实体中选择一个字段时数据是最新的。
步骤如下:
通过 EF/LINQ 查询:
var e = context.myEntity.First(x=>x.ID==ID); string n = context.myEntity.Where(x=>x.ID==ID).Select(x=>x.Name).First();
直接通过 SQL 更新数据库中的 Name 字段
然后通过EF/LINQ再次查询:
var e = context.myEntity.First(x=>x.ID==ID); string n = context.myEntity.Where(x=>x.ID==ID).Select(x=>x.Name).First();
e.Name
是以前的值,但 n
是最新的。
我们在调用之间重复使用相同的上下文。
使用 SQL 探查器,我可以确认即使数据过时,也会发生来自 EF 的 SQL 查询。
什么原因会导致这种情况?
最佳答案
数据缓存在上下文中。理想情况下,您的上下文应该具有较短的生命周期(例如,一个工作单元),以防止此行为成为问题,但如果您需要强制从数据库进行更新,请将 MergeOption 设置为 OverwriteChanges
context.MergeOption = MergeOption.OverwriteChanges
关于c# - 选择整个实体时, Entity Framework 返回过时的数据,但仅选择一个字段时, Entity Framework 返回最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783983/