Создание триггеров базы данных через Fluent API - PullRequest
0 голосов
/ 14 марта 2019

Я использую 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? Или есть другой способ автоматизировать создание триггера?

...