C# 实体框架及;记忆卡
我有一个n层应用程序ASP.NET MVC。我在DAL中使用实体框架。 所以我决定在dal中使用缓存层来提高应用程序的性能。我已经实现了,但是有一个问题。我在第一个请求之后将实体放到内存缓存中,当第二个请求尝试从缓存中获取实体时,它的抛出对象错误。我知道这个错误是正常的,因为我无法从缓存中删除它。但我想不起来。 我能做什么?我应该在dal中使用业务对象还是 “ObjectContext实例已被释放,不能再用于需要连接的操作”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
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);
}
}