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

12
我最近将我的网站项目迁移到了Asp.Net Core 2.0和Entity Framework Core 2.0。这个Web应用程序运行正常,所有dotnet ef migrations CLI命令都能正常工作,除了以下命令:
dotnet ef migrations script {migrationname1} {migrationname1} -o my-file-name.sql

查询似乎没有出现错误,但是也没有在屏幕或文件中生成任何SQL代码。

我正在使用Visual Studio 2017和Windows上的SQL Server Express(localdb)。

只是想知道是否有其他人在迁移后遇到了这个问题?

希望能得到一些帮助,因为在这里或Google上找不到任何信息。


如果你添加了“-v”(详细)选项,你会得到更多的信息吗? - Steve Greene
谢谢Steve - 我使用verbose获取更多信息,经过大量的调查工作 - 包括将我的项目转换为新的.NET Standard类库,然后再转回来 - 看起来这非常像是EF Core 2.0工具的一个bug。 - Martin Bee
4个回答

7

哎呀,天啊。哈哈哈。

我已经得出答案了,而且答案太荒谬了。

以下是添加迁移的语法:

Add-Migration MigrationName -Context MyDbContext

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

Script-Migration MigrationName -Context MyDbContext

这将会默默地失败并打开一个空的SQL文件!糟糕!

您需要运行以下命令:

Script-Migration -Context MyDbContext

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

编辑:

以上是包管理器控制台的PowerShell命令。如果您正在使用命令行中的dotnet ef migrations,则@Suraj的答案很有帮助。(您需要使用FROMTO参数)


我应该注意到我有多个DbContexts,这就是为什么我需要指定“-Context”参数的原因。你可能不需要那个。 - Jess

7

经过大量的努力和时间浪费,看起来这是一个dotnet ef migrations script的bug,因为它在EF Core 1.0中的功能已经不再起作用。

Script-Migration -From 20171106124427_061120171243

输出为空

Script-Migration -From 20171106124427_061120171243 -To 20171106124427_061120171243

输出为空(请注意-From和-To值相同)。
Script-Migration 20171106124427_061120171243

输出为空

Script-Migration -From 20171106122611_061120171225 -To 20171106124427_061120171243

如预期一样输出SQL语句(注:-From和-To的值不同)

无论我是在Visual Studio 2017 Package Manager控制台还是CLI中尝试,都能得到相同的结果。

经过进一步调查,答案似乎在以下内容中:

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

看起来,无论以前的版本是否有效,我的误解-From和-To属性都是问题所在。

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


5
dotnet ef migrations script FromA FromB 

这将在终端中生成脚本

如果你想要生成到一个文件中,使用这个选项

dotnet ef migrations script FromA FromB -o sample.sql

您的回答目前写得不够清晰。请进行编辑并添加更多细节,以帮助其他人理解这如何回答所提出的问题。您可以在帮助中心找到有关编写良好答案的更多信息。 - Community

0
请注意,如果您正在创建初始的脚本迁移,则将迁移名称留空。将迁移名称留空也会生成整个数据库的脚本。
例如,在一个名为InitialCreate的迁移的项目中,这将返回一个空的SQL文件:
Script-Migration InitialCreate 而这将返回正确的SQL文件:
Script-Migration

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接