0

我有一个带有 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 对象应该被销毁。或者我认为。

是吗?

4

1 回答 1

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;
    }
}
于 2013-03-06T10:07:24.110 回答