我正在使用.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是否有同等效力吗?
答案 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