Создание триггеров базы данных с помощью Fluent API

#sqlite #database-trigger #ef-core-2.2

#sqlite #база данных-триггер #ef-core-2.2

Вопрос:

Я использую ef-core 2.2 в связи с sqlite. Чтобы предотвратить / перехватить исключения параллелизма, я создаю токен параллелизма в соответствующей таблице. Токен — это временная метка, которую я настраиваю в своем DbContext классе через Fluent API:

 modelBuilder.Entity<User>().Property( u => u.Timestamp ).IsRowVersion();
  

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

В Up( MigrationBuilder migrationBuilder ) :

 migrationBuilder.Sql( "CREATE TRIGGER SetUserTimestamp AFTER UPDATE ON Users BEGIN UPDATE Users SET Timestamp = randomblob( 8 ) WHERE Id = NEW.Id; END" );
  

В Down( MigrationBuilder migrationBuilder ) я добавляю:

 migrationBuilder.Sql( "DROP TRIGGER SetUserTimestamp" );
  

Это решение действительно работает хорошо. Одна из проблем для меня заключается в том, что я должен быть предельно осторожен, чтобы не забыть включить создание триггера после того, как я создал новую миграцию через командную строку. Есть ли какой-либо способ настроить этот триггер в DbContext классе, возможно, через Fluent API? Или есть другой способ автоматизировать создание триггера?

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

1. В настоящее время поддержка EF Core отсутствует. Вам придется обрабатывать это вручную.