如何应用“在”较新迁移之前的迁移

VSO*_*VSO 5 .net c# entity-framework

我什至不知道如何表达这个。我已将迁移应用于数据库:迁移一。迁移二。迁移三。我刚刚拉了一个“迁移 2.5” - 如果我尝试恢复到迁移二和“更新数据库”,数据库更新成功并说有待处理的更改。这些“待定更改”是 Migration 2.5,即使它已被应用 - EF 希望我再次添加它们。

现在,通常,我会解决这样的问题 - 恢复到迁移一或二,删除迁移 2.5,应用更改,并创建一个新的“迁移 4”,最后出现。这样就避免了这个问题。但是,我现在无法更改迁移的顺序。我该如何解决这个问题?


编辑:我认为重要的是要注意我的数据库确实正常工作。如果数据库/代码不匹配,EF 会抛出一个错误,说明 - 这不会发生。问题是,当我确实需要进行Add-Migration合法更改时,它会尝试复制“2.5”更改以及实际的合法更改。

VSO*_*VSO 4

这实际上并不是原始问题的答案 - 我还没有找到一种方法让 EF 认识到它已经应用了“无序”迁移。但是,有两种方法可以解决该问题,更具体地说,是在尝试拉出“无序”迁移时出现引用的错误:

无法更新数据库以匹配当前模型,因为存在挂起的更改并且自动迁移被禁用。将待处理的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。

  1. 创建一个空的“修复”迁移 - 这是一个相当简单但肮脏的解决方案。你只需跑Add-Migration。然后,您删除迁移操作,因此您应该留下空块,如下所示:

    public override void Up()
    {
    }
    
    public override void Down()
    {
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后你就跑Update-Database。其工作原理很简单 - 正如前面指出的,EF 并未应用“无序”迁移,尽管事实上它实际上是在您第一次运行时应用的Update Database- 请注意,您应该能够验证它是否已应用和Get-Migrations。不管怎样,出于某种原因 EF 想要复制它,但会通过空迁移来安抚。对我来说毫无意义。

此解决方案是不可取的,因为它会留下毫无意义的迁移,但如果您无法轻松到达无序迁移已推送到的环境,则可能是您唯一的途径。

A。Update-Database Target-Migration "The Migration Before The Out of Order One"恢复到此问题开始之前的迁移。
b. 现在,从迁移文件夹中手动删除“无序”迁移文件。
C。再次运行Update-Database以使您的数据库包含除“无序”迁移之外的所有更改。
d.Run Add-Migration- 这将重新创建您在开始时删除的“无序”迁移,但在其正确的位置,或者至少是功能正常的位置。
e. 运行Update-Database就完成了。

请注意,除非与您的团队同步,否则这会产生问题,原因我懒得深入。#2 更好,但 #1 更容易、更快。

PS Stackoverflow 嵌套列表语法对我来说太多了,无法处理。