我正在尝试使用 HttpContext 缓存来缓存实体。我在服务层的代码如下
public Product GetById(long id)
{
Product product;
string storageKey = string.Format("products_{0}",id.ToString());
product = (Product)HttpContext.Current.Cache.Get(storageKey);
if (product == null)
{
product = _productContext.Products.Find(id);
HttpContext.Current.Cache.Insert(storageKey, product);
}
return product;
}
并像这样在客户端中使用:
ProductService productServices = new ProductService(_dbContext);
var product = productServices.GetById(id);
//... Populating controls
//On Update button click
ProductService productServices = new ProductService(_dbContext);
var product = productServices.GetById(id);
//Updating values of product and saveChanges.
在获得该项目时,它工作正常。但是当我在更新后尝试保存该项目时出现此错误:
一个实体对象不能被多个 IEntityChangeTracker 实例引用。
我知道这是由于使用不同的 DbContexts 进行检索和更新。使用时没有缓存它的工作正常。有没有更好的其他方法在实体框架中进行缓存?