#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 отсутствует. Вам придется обрабатывать это вручную.