LINQ没有刷新数据

时间:2013-03-05 23:09:04

标签: linq asp.net-mvc-4 azure-sql-database iis-express

我有一个使用Azure SQL的MVC 4网站,它们表现得很奇怪。当我在本地运行它(IIS Express)时,我有一个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对象应该被销毁。或者我认为。

是吗?

1 个答案:

答案 0 :(得分: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;
    }
}