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