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

时间:2016-09-22 16:41:16

标签: .net entity-framework asp.net-core asp.net-core-mvc entity-framework-core

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

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

SQL> @script "'MA'"
old   1: select * from t1 where TRD_SRC_SYS in (&1.)
new   1: select * from t1 where TRD_SRC_SYS in ('MA')

TRD_SRC_SYS
------------------------------
MA

SQL> @script "'MAG','LLELLE'"
old   1: select * from t1 where TRD_SRC_SYS in (&1.)
new   1: select * from t1 where TRD_SRC_SYS in ('MAG','LLELLE')

TRD_SRC_SYS
------------------------------
MAG
LLELLE

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

  

更新 - 数据库:找不到与参数匹配的参数   名称'script'

你知道EF7是否有同等效力吗?

5 个答案:

答案 0 :(得分:67)

根据EF documentation,您可以使用Script-Migration命令。

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

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

请务必查看文档,该命令还有一些选项。

答案 1 :(得分:10)

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

dotnet ef migrations script 

此外,您可以使用新的power shell out-file命令将其置于文件中。

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

答案 2 :(得分:2)

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

Script-Migration BadLatestMigration GoodPreviousMigration 

此后,请务必删除-迁移以删除错误的迁移

Remove-Migration

这在.Net Core 2.2.0中有效

答案 3 :(得分:1)

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中有效

答案 4 :(得分:0)

这也仅生成SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM