如何应用迁移"之前"较新的迁移

时间:2015-08-11 01:11:11

标签: c# .net entity-framework

我甚至不确定怎么说这个。我有迁移应用于db:Migration One。迁移二。迁移三。我刚刚拉了一个" Migration 2.5" - 如果我尝试恢复迁移二和“更新 - 数据库”,则数据库会成功更新,并说有待更改。这些"等待更改"迁移2.5,即使它已被应用 - EF希望我再次添加它们。

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

编辑:我认为重要的是要注意我的数据库工作正常。如果存在数据库/代码不匹配,则EF会抛出错误说明 - 这不会发生。问题是,当我需要Add-Migration进行合法更改时,它会尝试复制" 2.5"随着实际的合法变化而变化。

1 个答案:

答案 0 :(得分:1)

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

  

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

  1. 创建一个空的"修复"迁移 - 这是一个相当简单但很脏的解决方案。您只需运行Add-Migration即可。然后删除迁移操作,因此应该留下如下的空块:

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

    然后运行Update-Database。这个工作的原因很简单 - 如前所述,EF"无序"迁移未应用,尽管它是在第一次运行{@ 1}}时实际应用的 - 请注意您应该能够验证它是否已应用Update Database。无论如何,出于某种原因,EF想要复制它,但是会被空迁移安抚。对我没用。

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

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

      请注意,这会产生问题,除非与您的团队同步,原因是我太懒了。 #2更好,但#1更容易,更快。

      P.S。 Stackoverflow嵌套列表语法对我来说太过分了。