#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. Спасибо за ваш ответ, он очень полезен 🙂