Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何应用随附的迁移”;“之前”;新的迁移_C#_.net_Entity Framework - Fatal编程技术网

C# “如何应用随附的迁移”;“之前”;新的迁移

C# “如何应用随附的迁移”;“之前”;新的迁移,c#,.net,entity-framework,C#,.net,Entity Framework,我甚至不知道这个词怎么说。我已将迁移应用于db:Migration One。迁移二。移民三。我刚刚拉了一个“迁移2.5”-如果我尝试恢复到迁移2和“更新数据库”,数据库将成功更新,并表示有待定的更改。这些“挂起的更改”是Migration 2.5,即使已经应用了它-EF希望我再次添加它们 现在,通常情况下,我会绕过这样的问题-恢复到迁移1或迁移2,删除迁移2.5,应用更改,并创建一个新的“迁移4”,最后一个。这样就避免了这个问题。但是,我现在无法改变迁移的顺序。我如何解决这个问题 编辑:我认为

我甚至不知道这个词怎么说。我已将迁移应用于db:Migration One。迁移二。移民三。我刚刚拉了一个“迁移2.5”-如果我尝试恢复到迁移2和“更新数据库”,数据库将成功更新,并表示有待定的更改。这些“挂起的更改”是Migration 2.5,即使已经应用了它-EF希望我再次添加它们

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



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

这并不是对原始问题的真正回答-我还没有找到一种方法让EF认识到它应用了“无序”迁移。但是,有两种方法可以解决这个问题,更具体地说,就是在尝试执行“无序”迁移时获取引用的错误:

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

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

    public override void Up()
    {
    }
    
    public override void Down()
    {
    }
    
    然后运行
    updatedatabase
    。原因很简单-如前所述,“无序”迁移没有应用,尽管在您第一次运行
    updatedatabase
    时实际应用了它-请注意,您应该能够验证它是通过
    Get Migrations
    应用的。无论如何,出于某种原因,EF希望复制它,但将通过空迁移来缓解。对我来说毫无意义

  • 这种解决方案是不可取的,因为它会导致无意义的迁移,但如果您无法轻松地到达无序迁移已经被推送到的环境,那么它可能是您的唯一途径

  • a<代码>更新数据库目标迁移“无序迁移之前的迁移”以恢复到此问题开始之前的迁移。
    B现在,从您的迁移文件夹中手动删除“无序”迁移文件。
    C再次运行
    updatedatabase
    ,使数据库中除“无序”迁移之外的所有更改都处于最新状态。
    d、 运行
    Add Migration
    -这将重新创建您在开始时删除的“无序”迁移,但要放在正确的位置,或者至少是功能性位置。
    E运行
    updatedatabase
    ,您就完成了

    请注意,这将产生问题,除非与您的团队同步,因为我太懒了,无法深入讨论#2更好,但1更容易更快


    另外,Stackoverflow嵌套列表语法对我来说太难处理了

    为什么要创建一个新的迁移,由于某种原因,它位于两个现有迁移之间?迁移2.5不应该是迁移4吗。做我,做甜蜜的顺序迁移。2.我的高级开发人员决定合并他的旧分支。通过前面提到的迁移将它们推到构建中。3.我从github获取这些更改,包括所有迁移。4.他太酷了,无法解释如何让它工作。为什么订单会影响你的还是他们的?在我看来,如果他们以某种方式相互依赖,那么顺序并不重要,你真正需要做的是解决冲突。这是瞎猜吗,马特?因为我发现顺序总是很重要的,而且当迁移出现问题时,这个问题总是会发生。一旦您合并它们,每个人都会进行DbMigration(随后的
    更新数据库
    将使他们的环境最新)。有多少人正在创建迁移?听起来你需要弄清楚谁在做什么。