2013-03-05 2 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; 
    } 

, 어디 _ dB 내 DataContext를하고 LINQ가 된 IQueryable를 반환합니다.

IQueriable 때문에 데이터를 캐시하고 있지만이 기능을 종료하고 tmp 개체가 파괴되어 있다고 가정합니다. 또는 그렇게 생각합니다.

?

+0

어떤 브라우저에서 이것을 테스트하고 있습니까? 나는 때때로 IE가 데이터를 캐싱하는 것을 발견했고이를 막기 위해 메서드에 [CacheControl (HttpCacheability.NoCache), HttpGet]) 속성을 추가해야한다. – lopezbertoni

+0

IE와 Chrome에서 모두 문제가 발생합니다. –

답변

1

귀하의 컨텍스트 수명이 너무 길다고 가정합니다. DataContext 인스턴스는 수명이 짧아야합니다. entry 개체는 in에서 캐시되므로 다른 시간에 페치하려고하면 개체를 명시 적으로 새로 고치지 않으면 캐시에서 가져옵니다.

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; 
    } 
} 
관련 문제