2012-01-12 5 views
0

У меня есть следующий метод Edit:Ошибка при попытке обновить объект с помощью Entity Framework 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 - это имя EntitySet, когда я просматриваю конструктор edmx. Разве это то, что он сказал, или это будет имя таблицы (Фильм)?
  • Я видел вещи, касающиеся Attach, но я смущен относительно того, что именно это.

ответ

2

Для применения текущих значений объект с указанным ключом должен присутствовать в ObjectStateManager. Документация для ApplyCurrentValues состояний

Копирует скалярные значения из предоставленного объекта в объект в ObjectContext, который имеет один и тот же ключ.

Вы можете прикрепить объект и применить текущие значения.

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

Я думаю, что перезагрузка из БД вместо вызова 'Attach' будет лучшим примером. Фрагмент кода удаляет исключение, но как-то пустая операция, потому что вы обновляете объект с самим собой = Нет измененных свойств = Нет UPDATE для DB. – Slauma

+0

@Slauma Да. Спасибо, что заметили проблему. Обновлен ответ на изменение состояния объекта. – Eranga

Смежные вопросы