Аудит ядра EF для каскадных удаленных значений

#ef-code-first #entity-framework-core #audit

#ef-code-first #сущность-основа-ядро #аудит

Вопрос:

У меня есть механизм аудита для проекта, созданного с использованием подхода ef-core code first. Я установил для свойства «DeleteBehavior» значение каскад для некоторых таблиц в функции «OnModelCreating». Когда я удаляю объект, другой автоматически удаляется с помощью каскадного удаления. Пока все хорошо, и мне нужно получить все удаленные объекты, но я не могу. Средство отслеживания изменений не содержит каскадно удаленных объектов. Как я могу получить каскадные удаленные значения? Есть ли какой-нибудь способ сделать это?

Комментарии:

1. можете ли вы показать свой код?

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

Ответ №1:

Каскадное удаление происходит на стороне базы данных. Entity Framework не нужно знать, какой объект будет удален.

Entity Framework отслеживает изменения и удаляет только базовый объект.

Редактировать: ответить на подзапросы

Вы правы. Я владелец EF .

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

Предложение?

Есть некоторые предложения, но я почти уверен, что вам не понравится ни одно из них, и я также не рекомендую их по соображениям производительности:

  • Не используйте каскадное удаление (принудительное извлечение / удаление связанных объектов)

  • Создайте триггер удаления и войдите в систему на стороне базы данных.

Я не думаю, что для этого сценария существует хорошее решение.

Комментарии:

1. Я предполагаю, что вы являетесь создателем EF , я прав? Итак, есть ли возможный способ справиться с этой ситуацией с помощью вашей библиотеки? Если нет, что бы вы предложили?

2. Спасибо за ваш ответ, он очень полезен 🙂