2010-09-10 53 views
11

我創建了自己的從DbContext繼承的上下文。假設我在數據庫的[Posts]表中有1個職位。考慮這種情況:DbContext的內部緩存(?)

  1. 我問的DbContext這個職位只爲首次。 DbContext按預期返回它。
  2. 我在[Posts]表格手動更改了一列
  3. 我刷新我的網站=我再次請求DbContext這篇文章。
  4. DbContext返回一個帖子,該帖子對於此特定列具有舊值!

我看着SQL事件探查器和數據庫是每次我刷新我的網站時,所以爲什麼返回的帖子有一箇舊值?我猜DbContext試圖很聰明,並有一些內部緩存機制,但它會很高興告訴我,他是如此聰明...

有人可以解釋這一點給我嗎?

+0

[EF 4.0模型緩存數據,並且未檢測到修改的數據的可能重複。](http://stackoverflow.com/questions/3617987/ef-4-0-model-caching-the-data-and-不檢測修改後的數據) – 2010-09-10 19:54:02

+0

你的問題分爲兩個已經問過的問題。緩存問題: http://stackoverflow.com/questions/3617987/ef-4-0-model-caching-the-data-and-does-not-detect-the-modified-data/3621477#3621477共享上下文問題: http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392 – 2010-09-10 20:02:49

+0

是你的'DbContext'靜態的實例,還是它在每個頁面請求上創建? – 2014-06-04 10:58:34

回答

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窗體工作,每形式使用上下文