Используйте Entity Framework для обновления только нескольких свойств огромного класса - PullRequest
2 голосов
/ 10 февраля 2012

Сценарий:

Огромный Patient класс / сущность с около 100 свойствами. Но на веб-странице мне нужно только отображать контактную информацию (только около 10 свойств) для обновления. Do / Могу ли я создать ViewModel для этого?

Раньше я только использовал ViewModel для чтения данных. Можно ли использовать для обновления данных?


EDIT: Хорошо, чтобы подвести итог тому, что я нашел до сих пор.

  • Используйте AutoMapper, чтобы отобразить ViewModel (содержит только свойства, подлежащие обновлению) обратно в исходный большой EntityClass. Пример:


    [HttpPost]
    public virtual ActionResult Edit(EditUser user)
    {</p>

<code>     var domain = uow.Users.Create();
    domain.Id = user.Id;
    uow.Users.Update(domain);            
    AutoMapper.Mapper.Map<EditUser, Example.Core.Data.User>(user, domain);
    uow.Save();
    return View();
}
  • Создайте еще одну сущность с именем PatientSummary в модели EDMX, которая содержит только необходимые свойства. Вручную выполните сопоставление в дизайнере EDMX. Затем используйте эту сокращенную сущность для веб-страницы обновления контакта с пациентом.

Лично я чувствую, что должен быть лучший способ сделать это. Любой комментарий?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Да при сохранении просто загрузите ваш объект, а затем используйте autopper, чтобы скопировать свойства обратно в ваш объект или вручную установить их в вашем классе EF.

EF будет знать, какие реквизиты были изменены, и отправлять обновления только для этих измененных свойств.

0 голосов
/ 10 февраля 2012

Я на самом деле недавно опубликовал пару вопросов по смежной теме - вопрос 1 и более конкретный вопрос 2 .

Я не былна сто процентов доволен одним ответом, который я получил до сих пор на вопрос 2, но эксперты, похоже, согласились, что это хорошая идея - использовать модели представлений.С одной стороны, это избавляет вас от необходимости вручную проверять, чтобы «другие» 90 свойств не перезаписывались в базе данных сгенерированным оператором UPDATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...