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数据缓存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)