このような質問を少なくとも1ダースも読んだことがありますが、このようなものをいくつか把握するのには苦労しています。IEntityChangeTrackerエラーの複数のインスタンスのエラー
私は、エンティティフレームワークにリンクするリポジトリとコードファーストエンティティで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 });
サービス:(var db = new CapstoneEntities())
を使用しますが、私はこれを行うにはどのように他わからない:
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();
}
}
}
私の疑惑は、このコード行です。繰り返しますが、これは以前のやり方ではうまくいきましたが、今ではCRUD操作について間違いがあります。
ありがとうございます。
アクションはフォームによって呼び出されていますが、これは私が知っている限り、DataContextについての知識はありません。 – Johannes
'Review'はエンティティ、モデル、あるいはその両方ですか?それがモデルの場合は、DataContextを使用してそれを取得していますか? – lukiffer
エンティティはモデルのようなものですね。しかし、それらはADO.NETによってModels.ttファイルに自動生成されました。 – Johannes