Правильная регистрация изменений невозможна с Entity Framework? - PullRequest
3 голосов
/ 28 февраля 2012

Я хотел бы регистрировать все изменения, сделанные в базе данных SQL Azure с использованием Entity Framework 4. Однако до сих пор мне не удалось найти правильное решение.

До сих пор я мог самостоятельно отслеживать все объекты, переопределяяSaveChanges () и использование ObjectStateManager для извлечения всех добавленных, измененных и удаленных объектов.Это отлично работает.К сожалению, я не могу извлечь какую-либо полезную информацию из RelationshipEntries.В нашей модели базы данных есть некоторые отношения «многие ко многим», где я хочу регистрировать новые / измененные / удаленные записи.

Я хочу сохранить все изменения в хранилище Azure, чтобы иметь возможность отслеживать сделанные измененияпользователем и, возможно, откат к предыдущей версии сущности.

Есть ли какой-нибудь хороший способ сделать это?

Редактировать: Наш сценарий заключается в том, что мы размещаем RESTful WebService, которыйсодержит всю бизнес-логику и сохраняет данные в базе данных SQL Azure.Клиент должен быть аутентифицирован как пользователь с помощью WebService, и мне нужно будет хранить информацию о том, какой пользователь изменил данные.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2013

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

Даже если вы не хотите использовать библиотеку, вы можете посмотреть на код, чтобы увидеть один из способов обработки отношений журналирования. Он обрабатывает все кратности отношений.

В частности, см. Код для закрытых методов logRelationshipChange и logForeignKeyChange в классе ChangeLogger .

2 голосов
/ 28 февраля 2012

Вы можете сделать это с провайдером трассировки .

0 голосов
/ 28 февраля 2012

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

...