ASP.NETMVC-附加类型为“MODELNAME”的实体失败,因为同一类型的另一个实体已经具有相同的主键值
// Wrapper classes public class AViewModel { public A a { get; set; } public List<B> b { get; set; } public C c { get; set; } }
public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } if (!canUserAccessA(id.Value)) return new HttpStatusCodeResult(HttpStatusCode.Forbidden); var aViewModel = new AViewModel(); aViewModel.A = db.As.Find(id); if (aViewModel.Receipt == null) { return HttpNotFound(); } aViewModel.b = db.Bs.Where(x => x.aID == id.Value).ToList(); aViewModel.Vendor = db.Cs.Where(x => x.cID == aViewModel.a.cID).FirstOrDefault(); return View(aViewModel); }[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(AViewModel aViewModel) { if (!canUserAccessA(aViewModel.a.aID) || aViewModel.a.UserID != WebSecurity.GetUserId(User.Identity.Name)) return new HttpStatusCodeResult(HttpStatusCode.Forbidden); if (ModelState.IsValid) { db.Entry(aViewModel.a).State = EntityState.Modified; //THIS IS WHERE THE ERROR IS BEING THROWN db.SaveChanges(); return RedirectToAction("Index"); } return View(aViewModel); }
db.Entry(aViewModel.a).State = EntityState.Modified;
附加类型‘A’的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“修改”时,就会发生这种情况。这可能是因为一些实体是新的,还没有收到数据库生成的键值。在本例中,使用‘Add’方法或‘Add’实体状态来跟踪图形,然后根据情况将非新实体的状态设置为“未更改”或“修改”。
aluckdog
相关分类