Сохранение только полей, которые были изменены в Entity Framework 4 - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть форма Windows с некоторыми текстовыми полями и кнопкой Сохранить.Когда форма загружается, текстовые поля заполняются данными из сущности в моей модели.Когда пользователь нажимает кнопку «Сохранить», значения в каждом текстовом поле записываются обратно в объект, а затем вызывается SaveChanges для фиксации данных в базе данных.

Что я хотел бы знать, так это то, что лучшеспособ проверить, если форма содержит изменения?Если он не содержит изменений, мне не нужно вызывать SaveChanges, и я могу сохранить запись записи обратно в базу данных.Если он содержит изменения, и пользователь не нажал кнопку «Сохранить», я хочу получить подтверждение пользователя о том, что изменения не нужно сохранять.

Я подумал, что, возможно, я мог бы просто обновить поля объектаи затем проверяет его свойство State перед вызовом SaveChanges, но это не дает результата, поскольку обновление любого поля, даже с идентичным значением, приводит к тому, что объект помечается как измененный.

Итак, мой вопрос: каков наилучшийпроверить, действительно ли были внесены изменения в форму перед вызовом SaveChanges?

Спасибо,

Matt

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Фактическое обновление поля даже с тем же значением, что и предыдущее, считается измененным объектом, и в большинстве случаев это правильное бизнес-правило.

Что вы можете сделать, это сохранить копию исходного объекта, который использовался для заполнения полей формы, и сравнить его с текущим с помощью средства сравнения на равенство. Это не красиво, но оно выполняет свою работу в тех случаях, когда вы не можете рассчитывать на мнение администратора состояния объекта об изменениях.

0 голосов
/ 06 сентября 2011

Вы можете проверить состояние объекта. Просто сохраните данные из текстовых полей в сущности и посмотрите, является ли EntityState EntityState.Unchanged .

Подробности здесь: http://msdn.microsoft.com/en-us/library/system.data.entitystate.aspx

...