Как правило, лучше не связываться напрямую с объектом-сущностью, а создать модель редактирования и привязаться к ней.
В конце концов ... что мешает кому-то публиковать обратные значения, которые вы не хотите изменять с помощьюэтот подход?
Основная проблема здесь заключается в том, что привязка модели mvc изменяет свойства в модели до ее изменения в контексте, поэтому структура сущности не знает, какие значения изменились (и, следовательно, какие следует обновить.)
Вы немного уменьшили это с помощью db.Entry(c).State = EntityState.Modified;
, но это говорит платформе сущности, что вся запись обновлена.
Обычно я делал бы следующее:
- Привязка к модели специально для этого контроллера сначала
- Создайте экземпляр класса сущности, который вы хотите обновить, установите соответствующий Id и присоедините его к контексту
- Обновите свойства наобъект должен быть тем же, что и модель, к которой вы привязаны (объект прикреплен, и, следовательно, структура объекта отслеживает, какой объектсейчас меняется mns)
- SaveChanges
Шаг 3 немного утомителен, поэтому подумайте об использовании такого инструмента, как automapper , чтобы упростить задачу
Редактировать:
[HttpPost]
public ActionResult Edit(Company c)
{
if (ModelState.IsValid)
{
Company dbCompayObjct = new Company { companyId = c.companyId };
db.Company.Attach(dbCompayObjct);
dbCompanyObjct.CompanyName = c.CompanyName;
dbCompanyObjct.City = c.City;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(c);
}