EF Core 2.0迁移-dotnet ef迁移'script'命令输出空白文件

Mar*_*Bee 5 c# sql-server asp.net entity-framework ef-migrations

我最近将我的Web项目迁移到Asp.Net Core 2.0和Entity Framework Core 2.0。

Web应用程序正常运行,并且所有dotnet ef迁移CLI命令均与以下各项分开工作:

dotnet ef migrations script {migrationname1} {migrationname1} -o my-file-name.sql
Run Code Online (Sandbox Code Playgroud)

该查询似乎没有错误地运行,然后不向屏幕或文件生成任何SQL代码。

我在Windows上将Visual Studio 2017与SQL Server Express(localdb)结合使用。

只是想知道自迁移以来是否还有其他人遇到过这个问题?

希望能获得一些帮助,因为在此处或Google上找不到任何内容。

Mar*_*Bee 5

经过大量浪费的精力和时间,看起来这是一个错误dotnet ef migrations script,因为它不像在 EF Core 1.0 中那样运行。

Script-Migration -From 20171106124427_061120171243
Run Code Online (Sandbox Code Playgroud)

输出空白

Script-Migration -From 20171106124427_061120171243 -To 20171106124427_061120171243
Run Code Online (Sandbox Code Playgroud)

输出空白(注意 -From 和 -To 值相同)

Script-Migration 20171106124427_061120171243
Run Code Online (Sandbox Code Playgroud)

输出空白

Script-Migration -From 20171106122611_061120171225 -To 20171106124427_061120171243
Run Code Online (Sandbox Code Playgroud)

按预期输出 SQL 语句(注意 -From 和 -To 值不同)

无论是在 Visual Studio 2017 包管理器控制台还是 CLI 中尝试,我都会得到相同的结果。

经过进一步调查,答案似乎如下:

Script-Migration -From <PreviousMigration> -To <LastMigration>
Run Code Online (Sandbox Code Playgroud)

看来这是我对 -From 和 -To 属性的误解,无论这是否在以前的版本中都有效。

我错误地认为 -From 迁移文件将包含在生成的代码中,但经过一些测试后,情况似乎并非如此。


Jes*_*ess 5

E. 盖兹。哈哈

我想出了答案,这太荒谬了。

以下是用于添加迁移的语法:

Add-Migration MigrationName -Context MyDbContext
Run Code Online (Sandbox Code Playgroud)

因为我喜欢节省时间,所以我在包管理器控制台中向上箭头和向下箭头来回忆以前的命令。如果您回想该命令并将 Add-Migration 更改为 Script-Migration,您将最终运行:

Script-Migration MigrationName -Context MyDbContext
Run Code Online (Sandbox Code Playgroud)

这将最终以静默方式失败并打开一个空的 SQL 文件!天啊!

这是您要运行的命令:

Script-Migration -Context MyDbContext
Run Code Online (Sandbox Code Playgroud)

然后它会起作用。如果这不是你的问题,抱歉。我发现将-v选项添加到命令中非常有启发性,我建议您尝试一下。


小智 5

dotnet ef migrations script FromA FromB 
Run Code Online (Sandbox Code Playgroud)

这将得到终端本身生成的脚本

如果您想生成文件,请使用此选项

dotnet ef migrations script FromA FromB -o sample.sql
Run Code Online (Sandbox Code Playgroud)