以前曾经问过,但是没有一个可用的答案似乎适合我的情况。 为了执行某些验证,我必须从DB重新加载已绑定到模型的同一实体。以下原因导致错误。我几乎要失去理智了。
[HttpPost]
public ActionResult Edit(Tekes tekes, FormCollection fc)
{
...
Tekes myTekes = db.Tkasim.Find(tekes.TeksID);
<some validation here>
if (ModelState.IsValid)
{
db.Entry(tekes).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", new { id = tekes.TekesID });
}
}
答案 0 :(得分:0)
不确定为什么必须从数据库中获取相同的实体。无论如何,问题是Find
语句将Tekes
对象添加到上下文中,随后语句db.Entry(tekes).State = EntityState.Modified
尝试执行相同操作。目前还不清楚验证的内容是什么,但我认为您可以通过将Find
替换为
var myTekes = db.Tkasim.AsNoTracking().Single(x => x.TeksId == tekes.TeksID);
AsNoTracking告诉EF获取实体而不将它们添加到缓存和状态管理器。