DbContext的内部缓存(?)

时间:2010-09-10 17:29:17

标签: entity-framework-4

我创建了自己的上下文,它继承自DbContext。假设我在数据库的[Posts]表中有1个帖子。请考虑以下情况:

  1. 我问DbContext这个第一次的帖子。并且DbContext按预期返回它。
  2. 我手动更改[帖子]表中的一列
  3. 我刷新了我的网站=我再次询问DbContext这篇文章。
  4. DbContext返回的帖子具有此特定列的旧值!
  5. 每次刷新我的网站时,我都会查看SQL Profiler并且数据库被命中,那么为什么返回的帖子有旧值?我猜DbContext试图变得非常聪明并且有一些内部缓存机制,但很高兴告诉我他很聪明......

    有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

你好吗"令人耳目一新"?如果您知道某个值已更改,则可以使用ServerWins或ClientWins刷新上下文缓存值:

http://msdn.microsoft.com/en-us/library/vstudio/bb738618(v=vs.100).aspx

// Resolve the concurrency conflict by refreshing the 
// object context before re-saving changes. 
context.Refresh(RefreshMode.ClientWins, orders);

然而,真正的问题归结为何时以及为何会首先发生这种情况,这与上下文的生命周期有关。也许你可能过度使用相同的上下文?请记住,SQL Server等具有自己的缓存机制,因此实体框架并不是试图进行缓存的项目池中唯一的鱼。

从以下链接中我们收集一些提示,如果您关注,您可能不会遇到此问题。 http://msdn.microsoft.com/en-us/data/jj729737.aspx

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