Entity framework 4 DbContext';s内部缓存(?)

Entity framework 4 DbContext';s内部缓存(?),entity-framework-4,Entity Framework 4,我创建了自己的上下文,它继承自DbContext。假设我在数据库的[Posts]表中有1篇文章。考虑这种情况: 我第一次要求DbContext提供这篇文章。DbContext按预期返回它 我手动更改[Posts]表中的一列 I refresh my site=我再次向DbContext请求此帖子 DbContext返回一个post,该post具有此特定列的旧值 我查看了SQL Profiler,每次刷新我的站点时,数据库都会被命中,那么为什么返回的帖子有一个旧值呢?我猜DbContext是想变得

我创建了自己的上下文,它继承自DbContext。假设我在数据库的[Posts]表中有1篇文章。考虑这种情况:

  • 我第一次要求DbContext提供这篇文章。DbContext按预期返回它
  • 我手动更改[Posts]表中的一列
  • I refresh my site=我再次向DbContext请求此帖子
  • DbContext返回一个post,该post具有此特定列的旧值
  • 我查看了SQL Profiler,每次刷新我的站点时,数据库都会被命中,那么为什么返回的帖子有一个旧值呢?我猜DbContext是想变得非常聪明,并且有一些内部缓存机制,但如果能告诉我他是如此聪明,那就太好了

    有人能给我解释一下吗?

    你如何“提神”?如果知道某个值已更改,则可以使用ServerWins或ClientWins刷新上下文缓存值:

    然而,真正的问题归根结底是什么时候以及为什么会发生这种情况,这与上下文的寿命有关。也许你已经不再使用相同的上下文了?请记住,SQL Server和etc有自己的缓存机制,因此实体框架并不是试图进行缓存的项目池中唯一的鱼

    从下面的链接中,我们收集了一些提示,如果您遵循这些提示,您可能不会遇到此问题

    • 当加载更多对象时,上下文的内存消耗可能会迅速增加
    • 随着生存期的延长,遇到并发相关问题的几率增加
    • 使用Web应用程序时,对每个请求使用上下文实例
    • 使用Windows窗体时,为每个窗体使用上下文

    您的问题的可能重复被分为两个已经提出的问题。缓存问题:共享上下文问题:您的
    DbContext
    实例是静态的,还是在每个页面请求中创建的?当您说“我手动更改[Posts]表中的一列”时然后您更改了应用程序内存中dbContext中记录的列值,还是直接更改了后端数据库中的值?如果您在内存中的dbContext对象中进行了更改,那么在刷新数据库之前是否将更改提交给数据库?
    // Resolve the concurrency conflict by refreshing the 
    // object context before re-saving changes. 
    context.Refresh(RefreshMode.ClientWins, orders);