我有一个使用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对象应该被销毁。或者我认为。
是吗?答案 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;
}
}