この質問と同じように、少なくとも 12 の他の質問を読みましたが、この内容のいくつかを理解するのに苦労しています。
私は、エンティティ フレームワークにリンクするリポジトリとコード ファースト エンティティを使用して ASP.NET MVC3 を開発することに慣れています。
私は最近、サービス開発でデータベース ファーストの ADO.NET に切り替えました。外部キーを介してアクセスできるため、これは非常にクリーンであることがわかりました。
とにかく、このエラーが常に発生するため、古い保存方法が壊れているようです
エンティティ オブジェクトは、IEntityChangeTracker の複数のインスタンスによって参照できません
それでは、私の保存アクションと私のサービスを見てみましょう:
アクション:
[HttpPost]
public ActionResult AddReview(Review review, int id)
{
User loggedInUser = userService.GetUserByusername(User.Identity.Name);
review.WriterId = loggedInUser.UserId;
review.ProductId = id;
if (ModelState.IsValid)
{
reviewService.Save(review);
Product product = productService.GetProduct(id);
if(product.Quantity>=1)
product.Quantity--;
product.TimesBought++;
productService.UpdateRating(product, reviewService);
loggedInUser.GoldCoins -= product.Price;
Session["goldCoins"] = loggedInUser.GoldCoins;
userService.Save(loggedInUser);
productService.Save(product);
}
else
{
return View(review);
}
return RedirectToAction("Index", "Answers", new { reviewId = review.ReviewId });
サービス:
public class ReviewService : Service<Review, CapstoneEntities>
{
...
public void Save(Review review)
{
using (var db = new CapstoneEntities())
{
if (review.ReviewId == 0)
{
db.Reviews.Add(review);
db.Entry(review).State = EntityState.Added;
}
else
{
db.Entry(review).State = EntityState.Modified;
}
db.SaveChanges();
}
}
}
私の疑いは、このコード行にあります: using(var db = new CapstoneEntities())
ですが、他にこれを行う方法がわかりません。繰り返しますが、これは私の古いやり方で完全に機能しましたが、今ではほぼすべての CRUD 操作でエラーが発生します。
ありがとうございました。