c# - 选择整个实体时, Entity Framework 返回过时的数据,但仅选择一个字段时, Entity Framework 返回最新数据

标签 c# .net sql-server entity-framework entity-framework-4

我的 Entity Framework 支持的项目在选择整个实体时返回过时的数据,但在仅从实体中选择一个字段时数据是最新的。

步骤如下:

  1. 通过 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();
    
  2. 直接通过 SQL 更新数据库中的 Name 字段

  3. 然后通过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/

相关文章:

c# - 在不创建新的 Edmx 文件的情况下在 EF 4 上映射外键

c# - 使用 SqlBulkCopy 将 CSV 文件导入 SQL Server

sql-server - 为什么连接时临时表比表变量更快?

c# - 简单快速的异步二进制 TCP 套接字服务器?

c# - ANTLR 还是正则表达式?

c# - VisibleChanged 在不可见时不引发

C# 国际奥委会 : Implementing conditional injection

sql-server - 无法还原数据库

c# - 目前接受的使用 C# 4.0 从 SQL Server 检索数据的方法是什么?

c# - 线程在for循环中休眠