2011-11-07 128 views
0

我有一個ASP.NET MVC 3應用程序與SQL Server 2005數據庫後端。它使用LINQ to SQL鏈接到數據庫。在某些情況下,數據庫將被應用程序更新,但有時仍會緩存不應獲取緩存的舊數據。ASP.NET MVC 3錯誤緩存輸出

例如,如果用戶填寫表單發佈BlogEntryComment(我的一個LINQ to SQL類型),它將被添加到數據庫中。但是,新的BlogEntryComment不會顯示在我的要求它的意見。另外,如果我刪除了BlogEntryComment,它仍然顯示在視圖中。以下是我對此行爲的確定:

  • 這不是由瀏覽器緩存引起的。我清除了緩存;在不同的瀏覽器和不同的計算機上同時嘗試;無濟於事。

  • 這不會發生在「頂級」類型中,例如我的BlogEntry類型。它與BlogEntryComment類型發生在我的「頂級」類型中有關係(對許多評論有一個BlogEntry)。

  • 如果我重新啓動服務器,或嘗試在不同的服務器上,它似乎清除它所在的任何緩存,並且我不會得到錯誤的結果。

  • 它最終會顯示更新的數據,但最終需要15分鐘才能顯示。

我曾嘗試每一種高速緩存選項,我已經能夠在Web.config中找到關閉:

... 
<system.web> 
    ... 
    <caching> 
     <outputCache enableOutputCache="false" enableFragmentCache="false"> 
     </outputCache> 
    </caching> 
    <httpRuntime enableKernelOutputCache="false" /> 
</system.web> 
<system.webServer> 
    ... 
    <caching enabled="false"> 
    </caching> 
</system.webServer> 
... 

...但沒有運氣。有任何想法嗎?

+0

您是如何獲取數據的?你沒有緩存你的l2s數據上下文嗎? – Nik

+0

@Nik:對於整個應用程序,我有一個DataContext的單例實例(一個類的靜態成員)。所有控制器都轉到這一個DataContext中獲取數據。 – walterbing1

回答

2

查看l2s DataContext的文檔。它的意思是短暫的 - 即創建和處理每個http請求。如果它按照您描述的那樣是靜態的,那麼只要應用程序域一樣,它就會生活。

最有可能發生的事情是,您的DC留在內存中,隨後的數據請求不會到達db。 15分鐘或其他任何事情之後,您的應用程序域將進行回收,您將獲得全新的DC和新數據。

+1

這工作完美。我現在每次都創建一個新的DataContext對象。謝謝! – walterbing1

1

檢查您的動作爲[OutputCache]裝飾。它覆蓋了web.config