【问题标题】:Retrieve automatic migration fail details检索自动迁移失败详细信息
【发布时间】:2019-10-05 10:54:52
【问题描述】:

在我的 ASP.NET Entity Framework 6 项目中,我添加了一个新的模型和控制器。 我启用了自动迁移,但禁用了允许数据丢失。

当我在这些更改后运行应用程序时,新表实际上已创建到数据库中,但应用程序告诉我:

未应用自动迁移,因为它会导致数据丢失

没有任何其他细节。正如我在其他问题中所读到的那样:

Database-Update -Script

获得“差异”但没有发生任何事情,只是相同的错误消息。 我真的不想强制更新,除非我确定它会做什么。

我应该怎么做才能检索当前迁移的内容? 我试图查看 dbo.__MigrationHistory 表,但 Model 字段包含二进制数据。

更新

我能够使用 this 方法解码 Model 字段,但 edmx 文件仅包含 db 的整个图表,而不是迁移将发出的实际命令。

此外,即使按照工具本身的建议添加-Verbose 标志:

PM> Update-Database -Verbose
Using StartUp project 'MyProject'.
Using NuGet project 'MyProject'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.

它不显示 SQL 语句...

【问题讨论】:

    标签: c# entity-framework visual-studio-2015 database-migration


    【解决方案1】:

    显示该消息是因为您可能对模型进行了一些更改,导致 DROP 命令(例如删除属性)。

    要查看特定迁移的脚本,即最新迁移与之前迁移之间的更新,您可以使用以下命令:

    Update-Database -Script -SourceMigration: <migrationBeforeTheLastOne> -TargetMigration: <lastMigration>
    

    ChW's answer 中所述。

    【讨论】:

    • 我尝试使用该命令,但它说我只能对 Source 和 Target 参数使用显式迁移。
    • 可以肯定的是,我回到之前的备份并再次添加代码(模型和控制器)。我注意到应用程序第一次运行时它很好地应用了迁移并将新表添加到数据库中。然后,如果我再次运行应用程序(没有 any 更改),它会显示有关数据丢失的错误。
    • 发现了我的问题:上下文中缺少public DbSet&lt;&gt;。无论如何,我确认我看不到自动迁移的 SQL 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2017-12-10
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多