Каков хороший способ определить, когда данные сущностей были изменены в базе данных? - PullRequest
1 голос
/ 02 сентября 2011

Скажем, используя Entity Framework, я получил Entity из базы данных. Можно ли впоследствии проверить, что этот же конкретный объект был изменен в базе данных другим пользователем?

Метод, который я использовал ранее (в приложениях WinForm):

  • Сохранить объект в БД
  • Добавить запись в таблицу Транзакций с измененным типом сущности, уникальным идентификатором и датой и временем
  • При обновлении той же сущности проверьте строки в таблице транзакций после сохранения текущего пользователя.
  • Если запись найдена, действуйте соответствующим образом (перезагрузите сущность из базы данных, заблокируйте редактирование, сохраните конфликты и т. Д. В зависимости от того, почему я проверяю изменения).

Причины, по которым я хочу это сделать:

  • Избегайте перезагрузки всего набора сущностей и просто обновите сущности, которые изменились
  • Проверка конфликтов параллелизма при сохранении
  • Разрешение конфликтов параллелизма, основанных на начале редактирования. Для этого мне нужно сделать запись в таблице «Транзакции», когда пользователь начинает редактирование и обновление той же строки таблицы транзакций, когда пользователь сохраняет / отменяет.

Этот метод кажется правильным? Являются ли причины для этого вообще правильными? И, может быть, уже есть функциональность, которую я не смог найти?

1 Ответ

3 голосов
/ 02 сентября 2011

Интересно, почему вы не используете один из более стандартных способов оптимистичного параллелизма? EF имеет поддержку для этого. Я думаю, что отдельная таблица транзакций только добавляет сложности, потому что вы всегда должны явно поддерживать записи в этой таблице при выполнении операций CRUD с основными объектами. Что происходит, когда пользователь начинает редактирование и создает «блокирующую» запись в таблице «Транзакции», но затем вылетает? Не будет ли здесь уместной эксклюзивная блокировка записи в базе данных (например, пессимистическая блокировка).

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

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