Менять отслеживание с помощью EF с течением времени? - PullRequest
0 голосов
/ 04 июня 2011

Я хотел бы знать, как лучше отслеживать и / или сохранять изменения во времени, если я использую EF. Я хотел бы начать с EF для нового проекта. Что мне нужно, это своего рода история изменений.

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

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

Является ли эта сборка в EF каким-либо образом или каков наилучший способ получить такое поведение для EF?

1 Ответ

1 голос
/ 04 июня 2011

Нет, он не встроен в EF и не будет работать таким образом.Я даже не думаю, что это хороший подход на уровне базы данных, потому что он делает ссылочную целостность очень сложной.

С EF это будет работать, только если вы используете следующий подход:

  • Вы будете использовать условное сопоставление для вашей сущности - условие будет IsDeleted = 0.Это гарантирует, что в запросах будут использоваться только не удаленные объекты.
  • У вас будет сопоставлена ​​хранимая процедура для операции удаления для правильной установки IsDeleted = 1 вместо реального удаления записи
  • У вас будетвручную вызвать DeleteObject, чтобы удалить вашу запись, и после этого вы вставите новую запись - причина в том, что EF не может справиться со сценарием, в котором сущность меняет свое значение PK во время обновления.
  • Ваши сущности не будутиметь возможность участвовать в отношениях, если вы вручную не восстановите ссылочную целостность с помощью другой хранимой процедуры
  • Вам потребуется хранимая процедура для запроса исторических (удаленных) записей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...