我已经阅读了至少十几个其他问题,就像这个问题一样,但我无法掌握其中的一些内容。
我习惯于使用链接到实体框架的存储库和代码优先实体来开发 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();
}
}
}
我怀疑这行代码:使用(var db = new CapstoneEntities())
,但我不知道该怎么做。同样,这与我以前的做事方式完美配合,但现在我在几乎所有 CRUD 操作中都会遇到错误。
谢谢你。