Я использую триггеры для двух основных целей: аудит и обновление времени модификации / вставки.При аудите триггеры отправляют данные в связанные таблицы аудита.Это никак не влияет на ORM, так как эти таблицы обычно не отображаются в основном контексте данных (есть отдельный контекст данных аудита, используемый при необходимости просмотра данных аудита).
При записи / изменении вставки/ время модификации, я обычно помечаю эти свойства в модели как [DatabaseGenerated( DatabaseGenerationOptions.Computed )]
Это предотвращает сохранение любых значений, установленных в уровне данных, обратно в БД и позволяет триггеру принудительно устанавливать поля DateTime должным образом.
Это не жесткое и быстрое правило, что я управляю аудитом и этими датами таким образом.Иногда мне нужно больше информации аудита, чем доступно в самой базе данных, и вместо этого я выполняю аудит на уровне данных.Иногда я хочу заставить приложение обновлять даты / время (поскольку они могут быть одинаковыми для нескольких строк / таблиц, обновляемых одновременно).В этих случаях я мог бы сделать поле обнуляемым, но [Required]
в модели заставило бы установить дату / время, прежде чем модель будет сохранена.