Почему мне нужно получить старую сущность перед вызовом ApplyCurrentValues ​​для другого объекта? - PullRequest
0 голосов
/ 08 августа 2011

Похоже, этот фрагмент кода не работает, если я не включу первую строку фрагмента, на которую не ссылаются где-либо впоследствии?Так работает метод ApplyCurrentValues?

_entities.Contacts.FirstOrDefault(c => c.Id == contactToEdit.Id);
_entities.Contacts.ApplyCurrentValues(contactToEdit);
_entities.SaveChanges();
return RedirectToAction("Index");

Этот код редактирует запись контакта и сохраняет ее в базе данных.

Вот весь метод:

[HttpPost]
public ActionResult Edit(Contact contactToEdit)
{
    if (!ModelState.IsValid)
    {
        return View();
    }

    try
    {
        _entities.Contacts.FirstOrDefault(c => c.Id == contactToEdit.Id);
        _entities.Contacts.ApplyCurrentValues(contactToEdit);
        _entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

1 Ответ

2 голосов
/ 08 августа 2011

Насколько я понимаю, контекст объекта должен каким-то образом знать, какие поля изменились.
Поля будут отображаться обновленными только для него , если в контексте сохранена запись исходных значений .

Кажется, что в первой строке есть побочный эффект создания контекста объекта , осведомленного об исходных значениях (через загрузку объекта).

Взгляните на эти два ответа.

...