【问题标题】:How to Apply a Migration that comes "Before" Newer Migrations如何应用“在”新迁移之前的迁移
【发布时间】:2015-08-15 05:03:56
【问题描述】:

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

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


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

【问题讨论】:

  • 为什么要创建一个新的迁移,由于某种原因位于两个现有迁移之间?迁移 2.5 不应该是迁移四吗?
  • 1.做我,进行甜蜜的顺序迁移。 2. 我的高级开发人员决定要合并他的旧分支。通过上述迁移将它们推入构建中。 3. 我从 github 拉取这些更改,包括所有迁移。 4. 他太酷了,无法解释如何让它发挥作用。
  • 为什么优先顺序是你的还是他们的?在我看来,如果它们以某种方式相互依赖,那么顺序无关紧要,您真正需要做的是解决冲突。
  • 这是瞎猜吗?因为我发现顺序总是很重要,当迁移无序时,这个问题总是会发生。
  • 合并它们后,每个人都将拥有那个 DbMigration(随后的Update-Database 将使他们的环境保持最新)。有多少人在创造迁移?听起来你需要弄清楚谁在做什么。

标签: c# .net entity-framework


【解决方案1】:

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

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

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

    public override void Up()
    {
    }
    
    public override void Down()
    {
    }
    

    然后你运行Update-Database。这样做的原因很简单——正如前面所指出的,EF 没有应用“无序”迁移,尽管它实际上是在你第一次运行Update Database 时应用的——注意你应该能够验证它与Get-Migrations一起应用。无论如何,出于某种原因,EF 想要复制它,但会被空迁移所安抚。对我来说毫无意义。

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

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

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

附: Stackoverflow 嵌套列表语法对我来说太多了。

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2017-09-03
    • 1970-01-01
    • 2020-06-22
    • 2018-03-09
    • 1970-01-01
    • 2016-12-24
    • 2020-05-10
    • 2018-10-06
    相关资源
    最近更新 更多