2013-03-05 110 views
0

我有一個與Azure SQL的MVC 4網站,他們表現很奇怪。當我在本地運行它時(IIS Express),我對我的數據庫有一個LINQ查詢,即使它發生更改也會返回相同的數據,並且我可以通過單獨的查詢查看它。我真的很想知道發生了什麼事。LINQ不刷新數據

我使用的控制器功能是

public int GetNotificationTotalCount(int userId) 
    { 
     int cnt = 0; 
     var tmp = (from entry in _db.NotificationCounts 
        where entry.UserId == userId 
        select entry).FirstOrDefault(); 

     if (tmp != null) // return zeros 
      cnt = tmp.FlagsCount + tmp.RepliesCount; 

     return cnt; 
    } 

,其中_分貝是我的DataContext和LINQ返回的IQueryable

我知道它緩存數據,因爲IQueriable但我正在退出此功能,tmp對象應該被銷燬。或者我想。

是嗎?

+0

你在測試什麼瀏覽器?我發現有時IE會緩存數據,您需要將一個屬性([CacheControl(HttpCacheability.NoCache),HttpGet])添加到您的方法中以防止出現這種情況。 – lopezbertoni 2013-03-06 00:50:27

+0

我在IE和Chrome中看到了這個問題。 – 2013-03-06 03:01:32

回答

1

我假設你的上下文壽命太長。 DataContext實例應該是短暫的。 entry對象被緩存進來,所以當你嘗試從緩存中取出它時,除非你明確地刷新該對象。

public int GetNotificationTotalCount(int userId) 
{ 
    using(var db = new MyDataContext()) 
    { 
     return (from entry in db.NotificationCounts 
       where entry.UserId == userId 
       select entry.FlagsCount + entry.RepliesCount) 
       .FirstOrDefault() ?? 0; 
    } 
}