由于缓存导致DbContext已被释放,因此无法完成操作

时间:2013-11-01 11:00:26

标签: asp.net-mvc caching entity-framework-4

我在实体框架中使用缓存。在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方法? 感谢

1 个答案:

答案 0 :(得分:1)

C#使用关键字完成后调用Dispose()。看看这个页面。

http://www.dotnetperls.com/using

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

Microsoft引用:“using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。 “