我可以首先使用EF代码和.net核心生成迁移脚本吗


83

我正在使用.Net Core构建MVC应用程序,并且需要生成迁移脚本。

使用EF6,我确实运行了命令

update-database -script

但是当我尝试对.net Core进行相同操作时,抛出下一个异常:

Update-Database:找不到与参数名称“ script”匹配的参数

您是否知道EF Core是否具有等效功能?

Answers:


122

根据EF文档,您可以使用Script-Migrationcommand。

如果您只想编写所有迁移的脚本,则可以像这样从Package Manager控制台中调用它。如果您只想编写上一次迁移的更改脚本,则可以这样命名:

Script-Migration -From <PreviousMigration> -To <LastMigration>

确保检查文档,该命令还有更多选项。


1
脚本迁移工具似乎不适用于降级(当“到”迁移比“从”迁移更早时)。关于如何生成“撤消”脚本的任何想法?
Nullius

1
@Nullius,您不想调用它,或者将其视为“ undoScript”,您只需对代码进行撤消,然后更新Db并获取最新的脚本...
Haithem KAROUI

1
我们有一个部署服务器,它还管理db-migrations。例如:回退部署时,数据库也应降级到以前的状态。管理数据库迁移的构建步骤需要一个“上”和“下”脚本。我们发现,当指定比“从”迁移更早的“到”迁移时,脚本迁移也可以使用。但是,应将“到”迁移设置为实际要迁移之前的“到”迁移。同样,当尝试为最新的迁移生成“向下”脚本时,对于“从”迁移参数,应使用“ ZZZZZZ”(或类似名称)。
Nullius

2
如果我正在尝试为首次迁移生成脚本该怎么办。没有PreviousMigration
tchelidze

2
@tchelidze要为初始迁移编写脚本,请将-From参数设置为0。例如,Script-Migration
-From

19

您可以使用dotnet core cli生成脚本

dotnet ef migrations script 

您也可以使用新的power shellout-file命令将其保存到文件中。

dotnet ef migrations script | out-file ./script.sql

1
一个很好的技巧,或者在CMD中:dotnet ef迁移脚本> script.sql
Tore Aurstad

11
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

因此,您可以尝试

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

这适用于.Net Core 2.1


10

您还可以通过将参数反转为“脚本迁移”来生成脚本以回滚迁移。例如,如果您有两个迁移BadLatestMigration和GoodPreviousMigration,则可以使用以下命令还原为GoodPreviousMigration

Script-Migration BadLatestMigration GoodPreviousMigration 

之后,请确保删除-迁移以删除错误的迁移

Remove-Migration

这适用于.Net Core 2.2.0


我一直在寻找回滚,这为我解决了。可以在EF Core 3.0中运行
-Sehab

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.