Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架及;记忆卡_C#_Sql Server_Asp.net Mvc_Entity Framework_Caching - Fatal编程技术网

C# 实体框架及;记忆卡

C# 实体框架及;记忆卡,c#,sql-server,asp.net-mvc,entity-framework,caching,C#,Sql Server,Asp.net Mvc,Entity Framework,Caching,我有一个n层应用程序ASP.NET MVC。我在DAL中使用实体框架。 所以我决定在dal中使用缓存层来提高应用程序的性能。我已经实现了,但是有一个问题。我在第一个请求之后将实体放到内存缓存中,当第二个请求尝试从缓存中获取实体时,它的抛出对象错误。我知道这个错误是正常的,因为我无法从缓存中删除它。但我想不起来。 我能做什么?我应该在dal中使用业务对象还是 “ObjectContext实例已被释放,不能再用于需要连接的操作” public IQueryable GetAll() { var ca

我有一个n层应用程序ASP.NET MVC。我在DAL中使用实体框架。 所以我决定在dal中使用缓存层来提高应用程序的性能。我已经实现了,但是有一个问题。我在第一个请求之后将实体放到内存缓存中,当第二个请求尝试从缓存中获取实体时,它的抛出对象错误。我知道这个错误是正常的,因为我无法从缓存中删除它。但我想不起来。 我能做什么?我应该在dal中使用业务对象还是

“ObjectContext实例已被释放,不能再用于需要连接的操作”

public IQueryable GetAll()
{
var cacheKey=string.Format(“{0}{1}”,“CategoryRepository”,“GetAll”);
var isExists=_cache.Contains(cacheKey)&&Const.CacheIsActive;
如果(存在)
{
//此处出现错误:“ObjectContext实例已被释放,并且
//无法再用于需要连接的操作“
返回_cache.Get(cacheKey);
}
其他的
{
var obj=_db.Categories;
_cache.Add(cacheKey,obj);
返回obj;
}
}
在上下文写入中

protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            if (options != null)
            {
                options.UseMemoryCache(_cache);
            }
        }

\u db.Categories
是一个
IQueryable
,只包含有关如何获取数据(而不是存储数据)的说明。请尝试保存
\u db.Categories.ToList()
?您可能是对的。非常感谢。
protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            if (options != null)
            {
                options.UseMemoryCache(_cache);
            }
        }