Я проектирую формы в своем приложении ASP.NET MVC, которое будет получать объекты. Вот как выглядит типичное действие редактирования:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Person person)
{
peopleService.SavePerson(person);
return Redirect("~/People/Index");
}
Звонок SavePerson
в службе делает это:
public void SavePerson(Person person)
{
_peopleRepository.SavePerson(person);
}
И вызов SavePerson
в репозитории делает это:
public void SavePerson(Person person)
{
using (var dc = new SIGAPDataContext())
{
if (person.IsNew)
{
dc.People.InsertOnSubmit(person);
}
else
{
dc.People.Attach(person, true);
}
dc.SubmitChanges();
}
}
Теперь, это хорошо работает, когда я создаю новую запись. Однако, когда я обновляю его без всех элементов формы, он обнуляет другие поля. Например, моя модель Person имеет свойство NationalityID, которое обнуляется, если оно не отображается в форме редактирования.
Как лучше всего обновлять модель, используя только поля из формы? Нужно ли сначала получать запись из базы данных и обновлять ее свойства, например:
Person persistedPerson = peopleService.GetPerson(person.ID);
persistedPerson.Name = person.Name;
persistedPerson.DateOfBirth = person.DateOfBirth
// etc...
Или есть какой-нибудь другой, более чистый способ сделать это?