Ответ 1
Использование пользовательского инициализатора, выполняющего команду CREATE TRIGGER
SQL, является единственным вариантом, если вы хотите, чтобы EF создавал триггер для вас (похожий код, как здесь). Также не забудьте включить SET NOCOUNT ON
в начало кода запуска.
Но существует более сложная проблема, связанная с триггерной логикой. Если вам нужен триггер, который будет изменять данные, переданные в базу данных, вы должны понимать, что изменения, сделанные с помощью триггера, не будут отражены в вашем текущем контексте. Контекст будет по-прежнему знать только объект с данными, переданными в базу данных. Обычно это решается установкой свойств, измененных триггером, как DatabaseGeneratedOption.Computed
для обновления или DatabaseGeneratedOption.Identity
для вставки. В таком случае вы не можете изменять свойства в своем приложении, и они должны быть изменены в базе данных. EF гарантирует, что эти свойства будут выбраны после изменения и переданы объекту. Проблема в том, что это не работает с первым кодом.