2012-01-12 66 views
0

我有以下编辑方法:错误尝试使用实体框架来更新实体时,4

[HttpPost] 
public ActionResult Edit(Movie movie) 
{ 
    try 
    { 
     _db.ApplyCurrentValues("Movies1",movie); 
     _db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

我得到当我运行它下面的错误:

An object with a key that matches the key of the supplied object could not be found in the ObjectStateManager. Verify that the key values of the supplied object match the key values of the object to which changes must be applied.

几个要点:

  • 我在第一次做更新时没有收到错误,只有后续更新。
  • Movies1是查看edmx设计器时EntitySet的名称。这是什么它应该是或应该是表(电影)的名称?
  • 我已经看到关于附件的事情,但我很困惑,究竟是什么。

回答

2

为了应用当前值,具有该给定密钥的实体应存在于ObjectStateManager中。用于ApplyCurrentValues状态的文档

副本从所提供的对象的标量的值到具有相同的密钥的ObjectContext在 的对象。

您可以附加实体并应用当前值。

_db.Movies.Attach(movie); 
    _db.ObjectStateManager.ChangeState(movie, EntityState.Modified); 
    _db.SaveChanges(); 
+0

我认为从数据库重新加载而不是调用“附加”将是一个更好的例子。你的代码片段删除了这个异常,但不知何故是一个空操作,因为你正在用它自己更新一个实体=没有改变的属性=没有对数据库进行更新。 – Slauma 2012-01-13 00:43:02

+0

@Slauma是的。感谢您注意这个问题。更新答案以更改对象的状态。 – Eranga 2012-01-13 00:50:40