ASP.NET MVC 3.0 - поддержание состояния модели - PullRequest
0 голосов
/ 13 февраля 2012

Я новичок в ASP.NET MVC 3.0.Запросите мнение эксперта по приведенному ниже сценарию.

У меня есть страница с информацией о клиенте, где редактируется только Имя.Есть 10 других пользовательских свойств, которые не редактируются и отображаются с помощью SPAN.Когда пользователь отправляет страницу, мне нужно обновить только Имя.

Если я использую EF, мне придется снова загрузить клиента, перезаписать имя и затем сохранить.В противном случае мне придется где-то поддерживать модель клиента.

Кто-нибудь пробовал кэшировать модель (или viewmodel), используя идентификатор сессии?Это хорошая практика?

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Вы почти думаете в правильном направлении.

Если я использую EF, мне придется снова загрузить клиента, перезаписать имя и затем сохранить.В противном случае мне придется где-то поддерживать модель клиента.

В методе обновления ** Снова загрузить клиента и обновить имя только по мере необходимости, а затем сохранить

**По двум причинам

  1. Первое и самое важное правило - «не доверять пользовательским данным». и
  2. Параллелизм и предотвращение сохранения старых данных. См. Этот пример

Вместо использования Session, я предлагаю использовать скрытое поле для записи LastUpdateDateTime и идентификатора клиента, которые будут опубликованы в модели для извлечения записи и проверки LastUpdatedtimeс записью базы данных

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

использовать скрытые входы для других свойств в вашей форме.Таким образом, вы можете получить все свойства, привязанные к вашей сущности EF, и вам не нужно снова получать сущность из db.

@Html.DisplayFor(model=>model.x)
@Html.HiddenFor(model=>model.x)

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

Мой выбор всегда первый.:)

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

Как правило, вы должны использовать модель представления, отличную от модели базы данных. Сказав, что в вашем текущем случае ситуация очень проста, отправьте только имя контроллеру, а затем установите свойство Name объекта, который вы получаете из EF, с переданным именем.

Кэширование модели представления или модели не является вашей задачей. Кэширование модели базы данных выполняется EF, ваша проблема в основном заключается в отсутствии четкой иерархии приложений. На самом деле, я настоятельно рекомендую узнать немного больше о шаблоне MVC, базовой архитектуре приложения (2-3 уровня) и когда и как использовать OR \ M (что такое EF).

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