c# – 实体框架中的HttpContext数据缓存

c# – 实体框架中的HttpContext数据缓存,第1张

概述我正在尝试使用HttpContext缓存来缓存实体.我在服务层的代码如下 public Product GetById(long id){ Product product; string storageKey = string.Format("products_{0}",id.ToString()); product = (Product)HttpContext.Current.Ca 我正在尝试使用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.

获得该项目时它工作正常.但是当我在更新后尝试保存该项时会收到此错误:

An entity object cannot be referenced by multiple instances of
IEntityChangeTracker.

我理解这是由于使用不同的DbContexts检索和更新.使用时没有缓存其工作正常.有没有更好的其他方法在实体框架中进行缓存?

解决方法 尝试将缓存的产品附加到当前上下文:

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);   }   else   {       _productContext.Products.Attach(product);   }   return product;}

此外,如果您使用的是Asp.Net MVC,请考虑使用output caching来缓存控制器 *** 作返回的内容.

总结

以上是内存溢出为你收集整理的c# – 实体框架中的HttpContext数据缓存全部内容,希望文章能够帮你解决c# – 实体框架中的HttpContext数据缓存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存