简而言之,异常是在 POSTing 包装器模型期间抛出的,并将一个条目的状态更改为“ Amendment”。在更改状态之前,状态被设置为“ Detached”,但是调用 Attach ()会引发相同的错误。我用的是 EF6。
请在下面找到我的代码(模型名称已经更改,以便于阅读)
模特
// 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”的实体失败,因为 相同的类型已经有相同的主键值 使用“附加”方法或将实体的状态设置为 “未更改”或“修改”,如果图中的任何实体有 这可能是因为一些实体是新的和 还没有收到数据库生成的键值 “添加”方法或“添加”实体状态来跟踪图形和 然后将非新实体的状态设置为“未更改”或“修改”为 合适。
有没有人看到我的代码中有什么错误,或者知道在什么情况下编辑模型时会抛出这样的错误?