ASP.NET MVC3 обновляет только необходимые поля - PullRequest
0 голосов
/ 08 декабря 2011

Предположим, у нас есть class PersonModel, пользователь редактирует форму сведений в браузере и нажимает кнопку submit.

Как написать логику контроллера для создания ОБНОВЛЕНИЯ SqlComand (без EF) иобновить только те поля из class PersonModel (FirstName, LastName, Age...), которые были изменены.Каким должен быть аргумент контроллера /Person/Edit/<id>?

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

Вы не делаете ничего особенного для своего кода MVC и не добавляете никаких специальных параметров URL.

Если вы хотите обновить только измененные поля, вам придется написать многокод.Вы должны получить текущую запись, сравнить все поля ваших моделей с полями записей, выяснить, какие из них изменились, затем вам нужно создать оператор SQL на основе измененных полей, а затем обновить его, убедившись, что используется оптомистическая записьблокировка для гарантии того, что поле не изменилось между моментом его извлечения и обновлением.

Вероятно, это будет пара сотен строк кода.Или это может быть одна строка кода, если вы используете ORM.

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

Удачи, я, конечно, не собираюсь это писать.

1 голос
/ 08 декабря 2011

Я хотел бы предложить, чтобы вы не использовали обобщенную PersonModel, которая, как я полагаю, представляет собой представление вашей модели данных 1: 1.Вы должны создать расширенную модель вида с теми полями, которые вам нужны.Затем используйте что-то вроде AutoMapper, чтобы отобразить ViewModel обратно на DomainModel.

Вот справочник о том, как использовать AutoMapper для такого сценария.

Как скрещивать объекты карты с помощью AutoMapper

0 голосов
/ 08 декабря 2011

Вы можете использовать Linq и позволить тексту данных сделать все за вас.В модели вы просто создаете свой класс данных с запросами linq для обновления, извлекаете объект, устанавливаете все значения, которые были переданы из представления в извлеченном объекте (вам придется делать это в любом случае, так какшаблон отделяет представление от модели | Помните также, что MVC реализует обозреватель, который позволяет представлению знать об изменениях в модели, поэтому вы не можете знать, что было изменено в представлении из контроллера), а затем вызываетеDataContext.SubmitChanges ();метод.Контекст данных будет выполнять эту работу самостоятельно.Он будет знать, что нужно изменить и изменить, и сделает самый эффективный запрос.

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