是否有可能将所有迁移文件合并为一个?
我创建了初始迁移。
dotnet ef migrations add InitialMigration
每当我有一些模型更改时,我就会创建新的迁移更新。
但现在我有太多的迁移更新文件了。 是否可能将所有迁移文件合并为一个?
当然,删除数据库不是选项,我必须保留数据!
是否有可能将所有迁移文件合并为一个?
我创建了初始迁移。
dotnet ef migrations add InitialMigration
每当我有一些模型更改时,我就会创建新的迁移更新。
但现在我有太多的迁移更新文件了。 是否可能将所有迁移文件合并为一个?
当然,删除数据库不是选项,我必须保留数据!
EF 6.X具有一个选项IgnoreChanges
,这非常适合您的情况。但不幸的是,它不是EF core中可用的功能。
但是有一种解决方法。
步骤1:删除Migrations文件夹中的所有迁移脚本。
步骤2:在程序包管理器控制台中运行:
PM> Add-Migration InitialCreate
步骤3: 删除Up()
和Down()
方法的代码。在执行此操作之前,请将这些方法另存为,因为我们将在步骤5中需要它们。
步骤4:运行:
PM> Update-Database
它将向__EFMigrationsHistory
表中插入新记录。
步骤5:之后,从在步骤3中保存的内容中填写上述迁移脚本(即.._InitialCreate
)的Up()
和Down()
方法。
就这样。现在您只有1个迁移文件:)
注意:EF Core与包管理器控制台(PM):Package Manager Console
Up()
和Down()
方法的代码,而是将Up()
方法注释掉,然后在最终的第五步中取消注释即可。请注意,注释是通过在代码前面添加双斜杠(//)实现的。 - S.SerpooshanUp()
或 Down()
中使用的 migrationBuilder.Sql()
这样的原始 SQL 语句。 - mu88一种方法是物理删除所有迁移文件并添加新文件。如果您的迁移位于“迁移”文件夹中,则可以简单地将其删除,否则您还需要删除“ModelSnapshot”文件。我认为这种方法可以解决您的问题。
$ migrate status # Shows migrations applied and "pending" (be applied) to the selected database
$ migrate up 1 # Applies the next migration
$ migrate down 1 # Undo the last migration
$ migrate redo 1 # Undo and apply last migration (handy when developing migrations)
$ migrate up # Applies all pending migrations
$ migrate --env=test status # Show status of the `test` database.
# Emit forward and reverse SQL for a sequence of migrations.
# Just what your DBAs wanted!
$ migrate script 20090804225207 20090804225333 > up.sql
$ migrate script 20090804225333 20090804225207 > down.sql