Хобрук: Ваш путь к мастерству в программировании

Сохранение только тех полей, которые изменились в Entity Framework 4

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

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

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

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

Спасибо,

Мэтт


  • Какой стиль программирования вы используете с Entity Framework? База данных в первую очередь (с визуальным дизайнером/моделью)? Первый код? 06.09.2011
  • Мне пришлось использовать первый подход к базе данных 09.09.2011

Ответы:


1

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

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

06.09.2011
  • Спасибо за ответ. К сожалению, все мои текстовые поля записываются обратно в объект при нажатии кнопки «Сохранить», даже если никаких изменений не было внесено. это означает, что все свойства сущности имеют измененное состояние. 09.09.2011

  • 2

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

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

    06.09.2011
  • Спасибо за ответ. Я думал, что мне придется сделать что-то вроде этого. Я удивлен, что это правильное бизнес-правило из-за следующего: если пользователь просматривает записи, пытаясь что-то найти, тогда каждая запись должна быть записана обратно в базу данных. Мне кажется, что единственными альтернативами являются приглашение пользователя и вопрос о том, хотят ли они сохранить или внедрить описанную вами систему. Или моя архитектура совершенно неверна! Еще раз спасибо за ответ. 09.09.2011
  • Новые материалы

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

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