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

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

对于 EF6,我确实运行了命令

update-database -script

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

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

你知道英孚核心有没有类似的产品吗?

145361 次浏览

根据 EF 文档,你可以使用:

Script-Migration

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

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

一定要检查文档,这个命令还有几个选项。

可以使用 dotnet core cli 生成脚本

dotnet ef migrations script

还可以使用新的 power shell out-file命令将其存入文件。

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

您还可以通过反转 Script-Immigration 的参数来生成用于回滚迁移的脚本。例如,如果您有两个迁移,BadLatestImmigration 和 GoodPreviousImmigration,您可以使用以下命令恢复到 GoodPreviousImmigration

Script-Migration BadLatestMigration GoodPreviousMigration

之后一定要删除-迁移,以删除不好的迁移

Remove-Migration

这在.Net Core 2.2.0中可以工作

这也只生成 SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM
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中工作