Обновление сущности перед удалением - PullRequest
3 голосов
/ 07 июля 2011

Как я могу обновить информацию аудита, содержащуюся в объекте, перед его фактическим удалением?Я работаю над классом, производным от DbContext.

Я попытался изменить состояние на Modified, затем установить обновленную информацию, затем вызвать base.SaveChanges (), а затем пометить его как удаленный.Проблема возникает, когда я пытаюсь вызвать SaveChanges после установки обновленной информации.Похоже, что другие объекты отношения помечены как удаленные, и я получаю это исключение:

"A relationship from the 'ChildrenEntity' AssociationSet is in the 'Deleted' state. Given    multiplicity constraints, a corresponding 'ParentEntity' must also in the 'Deleted' state." 

Спасибо!

1 Ответ

2 голосов
/ 08 июля 2011

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

  • Итерация всех записей в context.ObjectStateManager.GetObjectStateEntires и сохранение фактического состояния для каждой записи в некоторой временной структуре данных.
  • Установите все записи в неизменном состоянии, кроме тех, которые вы хотите изменить в первую очередь.
  • Позвоните SaveChanges в первый раз
  • Повторная итерация всех записей состояния и установка их состояния, сохраненного во временной структуре данных
  • Позвоните SaveChanges снова

Вы должны выполнить всю операцию за TransactionScope

...