【问题标题】:Code First Migration Entity Framework 6 Empty Up/DownCode First 迁移实体框架 6 Empty Up/Down
【发布时间】:2015-07-03 06:31:29
【问题描述】:

我遇到的问题是,当我“添加迁移”时,似乎没有与目标数据库进行比较,并且 Up/Down 方法为空。

这从我针对不同的环境开始。当我更新数据库并且它针对一个特定的数据库,我的开发数据库时,迁移更改工作正常。

当我将连接字符串更改为以另一个数据库、另一个服务器上的另一个开发盒为目标,并尝试为该特定环境添加迁移时,Up/Down 方法始终为空。

我尝试以更新数据库为目标,以在第二个开发框回滚对先前迁移的更改,但它没有改变任何东西。

如果我将代码优先更改从一个环境迁移到另一个环境,我需要特别做些什么吗?

【问题讨论】:

    标签: entity-framework-6 entity-framework-migrations


    【解决方案1】:

    您不需要添加新的迁移,您需要强制 EF 运行所有旧迁移。尝试指定源迁移和目标迁移:

    Update-Database -SourceMigration: $InitialDatabase -TargetMigration: AddPostAbstract  
    

    另一种选择是生成一个脚本,您可以通过在命令中添加 -Script 来针对其他数据库运行该脚本。

    https://msdn.microsoft.com/en-us/data/jj591621.aspx#script

    如果您有很多迁移,您可以通过删除它们并执行新的添加迁移来赋予它们角色。

    【讨论】:

    • 我想我意识到发生了什么。似乎有人直接对数据库进行更改,然后使用 vs2013 添加 ado.net 实体模型,重新创建代码优先实体和结构。所以本质上,中间迁移并不存在。我认为这就是数据库的比较模型搞砸的原因。这相当于什么,有没有一种方法可以在不使用迁移文档的情况下在目标数据库和当前代码优先模型之间进行完整比较来创建迁移?
    • 您可以进行全新的初始迁移。您将获得所有内容的 Up() 和 Down() 代码,并且您可以注释掉现有的东西。另一个选择是在 2 个数据库之间进行模式比较。 techbubbles.com/sql-server/…
    • 是的,这正是我所做的。我生成了一个新的初始迁移,然后对两个服务器上的架构进行了比较,然后注释掉了代码上的相似之处。这是一个痛苦的背后,但它奏效了,我学到了一些东西。感谢您的回复!
    【解决方案2】:

    我最终做的是生成初始迁移,然后比较两台服务器之间的架构(@Steve Greene 评论了一个很棒的链接,描述了我在此处进行比较所做的工作:http://www.techbubbles.com/sql-server/schema-compare-for-sql-server-in-visual-studio-2013/)。然后,我煞费苦心地浏览了迁移代码并注释掉了不必要的部分。

    迁移成功后,一切都恢复正常运行。

    我不确定是否有更好的方法来处理它,但这对我有用。

    【讨论】:

      【解决方案3】:

      几个小时以来,每次尝试都会出现这种空的 up() 和 down() ,我一直在苦苦挣扎。甚至尝试重新开始一个新项目..没用..

      直到我有了在 Visual Studio 中将数据项目设置为解决方案的默认启动项目的想法......然后神奇的事情发生了!

      真的不能说这是否是一个解决方案(因为我仍然没有看到与基本问题的联系),但它可能对 Visual Studio 的宇宙标志与我的相同的人有帮助:)

      【讨论】:

      • 所以,如果您使用的是 Visual Studio,我注意到的一件事是迁移使用启动项目中定义的连接字符串来运行它的比较和迁移。当您将启动项目更改为数据项目时,它开始使用该项目中定义的配置。
      猜你喜欢
      • 2013-04-04
      • 2012-10-15
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      相关资源
      最近更新 更多