Это простая база данных EFCore в приложении .NETCore 3.1 с тремя миграциями.
"init" Initial migration
"gcalg500" Added seeding data and tables
"valtt" Added more seeding data and tables
Самый последний из них все еще проверяется в рабочем коде. Но после того, как я сделал это и запустил несколько раз, я понял, что хочу отменить это, внести больше изменений и применить снова. поэтому я попробовал remove-migration
из консоли диспетчера пакетов. Возвращенная ошибка была
The migration '20200507181032_valtt' has already been applied to the database. Revert it
and try again. If the migration has been applied to other databases, consider reverting its
changes using a new migration.
Небольшой поиск здесь привел меня к эту ветку, в которой говорится, что решение состоит в том, чтобы update-database
вернуться к предыдущей миграции, а затем затем удалить миграцию. Итак, я попробовал это, но, видимо, есть проблема с провайдером SQLite, который не позволяет мне это сделать. Вывод консоли диспетчера пакетов выглядит следующим образом:
PM> update-database gcalg500
Build started...
Build succeeded.
Reverting migration '20200507181032_valtt'.
System.NotSupportedException: SQLite does not support this migration operation ('DropColumnOperation'). For more information, see http://go.microsoft.com/fwlink/?LinkId=723262.
at Microsoft.EntityFrameworkCore.Migrations.SqliteMigrationsSqlGenerator.Generate(DropColumnOperation operation, IModel model, MigrationCommandListBuilder builder, Boolean terminate)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.<>c.<.cctor>b__71_12(MigrationsSqlGenerator g, MigrationOperation o, IModel m, MigrationCommandListBuilder b)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model)
at Microsoft.EntityFrameworkCore.Migrations.SqliteMigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateDownSql(Migration migration, Migration previousMigration)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.<>c__DisplayClass15_1.<GetMigrationCommandLists>b__1()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
SQLite does not support this migration operation ('DropColumnOperation'). For more information, see http://go.microsoft.com/fwlink/?LinkId=723262.
Хорошо, поэтому я не могу использовать этот подход. Итак, что мне делать? Есть ли какой-нибудь ручной способ исправить это? У меня есть расширение SQLite Compact Toolbox, поэтому я могу напрямую редактировать базу данных SQLite, если это можно сделать таким образом.
(Я понимаю, что мог бы просто применить еще одну миграцию поверх той, которую я уже сделал, но я очень хотел бы избежать этого сценария по несвязанным причинам. Кроме того, это проблема, которая может возникнуть снова, поэтому, если есть способ сделать это, я хотел бы узнать его)