0

以前有人问过这个问题,但似乎没有一个可用的答案适合我的情况。为了执行一些验证,我必须从 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 });
  }
}
4

1 回答 1

0

不确定为什么必须从数据库中获取相同的实体。无论如何,问题在于该Find语句将Tekes对象添加到上下文中,随后该语句db.Entry(tekes).State = EntityState.Modified尝试做同样的事情。目前尚不清楚验证的全部内容,但我认为您可以通过替换Findby来解决这个问题

var myTekes = db.Tkasim.AsNoTracking().Single(x => x.TeksId == tekes.TeksID);

AsNoTracking告诉 EF 获取实体而不将它们添加到缓存和状态管理器中。

于 2012-11-26T23:20:02.827 回答