5

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 の複数のインスタンスによって参照できません。

これは、異なる DbContext を使用して取得および更新したことが原因であることを理解しています。キャッシュせずに使用すると、正常に動作します。エンティティ フレームワークでキャッシュを行うためのより良い方法はありますか?

4

1 に答える 1