为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NETMVC-附加类型为“MODELNAME”的实体失败,因为同一类型的另一个实体已经具

ASP.NETMVC-附加类型为“MODELNAME”的实体失败,因为同一类型的另一个实体已经具

C#
拉莫斯之舞 2019-06-13 14:48:07
ASP.NETMVC-附加类型为“MODELNAME”的实体失败,因为同一类型的另一个实体已经具有相同的主键值简而言之,异常是在投递包装器模型和将一个条目的状态更改为“修改”期间抛出的。在更改状态之前,状态设置为“脱离”,但是调用Attit()会引发相同的错误。我在用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’的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“修改”时,就会发生这种情况。这可能是因为一些实体是新的,还没有收到数据库生成的键值。在本例中,使用‘Add’方法或‘Add’实体状态来跟踪图形,然后根据情况将非新实体的状态设置为“未更改”或“修改”。有人在我的代码中看到了什么错误吗?或者在什么情况下它会在编辑模型的过程中抛出这样的错误呢?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

有趣的是:

_dbContext.Set<T>().AddOrUpdate(entityToBeUpdatedWithId);

或者如果您仍然不是泛型的:

_dbContext.Set<UserEntity>().AddOrUpdate(entityToBeUpdatedWithId);

似乎顺利地解决了我的问题。


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 735 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信