Запретить обновление неизменного значения в ASP.NET MVC и Entity Framework - PullRequest
5 голосов
/ 28 сентября 2010

Я использую ASP.NET MVC и Entity Framework. У меня есть веб-страница «Редактировать лицо», где можно редактировать поля пользователя, а затем в действии «Отправить сообщение» я использую следующий код.

var person = objectCtx.Persons.Where(s => s.Id == id).FirstOrDefault();
TryUpdateModel(person, form.ToValueProvider());
objectCtx.SaveChanges();

Отлично работает. Однако в сгенерированном SQL я все еще вижу инструкцию UPDATE, даже если значения не были изменены. Есть ли способ избежать этого в ASP.NET MVC или в Entity Framework?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2010

Что ж, если вы назначите свойство, то Entity Framework будет предполагать, что вы знаете, что вы делаете, и обновит его. Вы говорите, что пользователь изменил только одно поле, но я не уверен, как или MVC, или Entity Framework должны знать, что из всех пар ключ-значение в форме POSTed HTML пользователь фактически изменил только одну. , В своем вопросе вы говорите, что «значения не были изменены», но в своих комментариях к ответу @ jchapa вы говорите, что «не вся информация одинакова». Это говорит о том, что реальная проблема не в том, что делает Entity Framework, а в том, что вы говорите, чтобы сделать это.

Я думаю, что, возможно, вы ищете решение не в том месте.

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

Если ваша настоящая проблема заключается в том, что другой пользователь мог изменить экземпляр Person между временем, когда пользователь отправил запрос GET для формы, и временем, когда пользователь отправил ей изменения, вы можете добавить поле TIMESTAMP в таблицу. и установите для него фиксированный режим параллелизма.

0 голосов
/ 28 сентября 2010

Вы могли бы просто не звонить SaveChanges(), если информация та же.

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