我在实体框架中使用缓存。在for循环中我击中了linq查询5次。第一次缓存为空,因此我将其存储在具有以下缓存策略的缓存中
else if (cachedData == null)
{
cachedData = this._db.ListsofItems
.Include(a => aItems)
.ToList();
// Save to cache
cache.Set(cacheName, cachedData, new CacheItemPolicy()
{
UpdateCallback = new CacheEntryUpdateCallback(CacheUpdateOnExpiration),
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(50))
});
但第二次当我点击查询时(此时缓存数据不为空),它返回查询数据。在下面的方法中,当我试图找到计数时,它会自动调用dispose方法。不知道为什么。
using (var queries = new Queries(this.Context))
{
m.Started = queries.Get().Filter(itemstatus: new List<int> { 1.2}, stDate: c.AddMonths(-1), eDate: current, limit: 2000).Count();
}
所以问题是,在第二次执行时为什么count会自动调用dispose方法? 感谢
答案 0 :(得分:1)
C#使用关键字完成后调用Dispose()。看看这个页面。
http://www.dotnetperls.com/using
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
Microsoft引用:“using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。 “