迁移同步开发和生产数据库

时间:2014-12-30 10:56:33

标签: c# entity-framework ef-code-first ef-migrations asp.net-mvc-5.1

我正在使用MVC 5和.NET Framework 4.5.1。代码优先。我也在使用SQL 2012服务器迁移和(localdb)\ v11.0。

我正在使用C#和MVC5开发项目。在开发过程中,我在我的开发计算机中创建了许多新表,并更改了一个“名称”字段,我相信系统会为其编制索引。我添加了它并删除了几次。

之后,我添加了很多新的无关表,但由于某些原因,由于“名称”字段的索引,我的迁移开始给我外部约束错误。当我修复它们时,这些错误不断增加,因此,我决定在迁移中恢复到初始状态,并使用当前位置作为新的起点重置。我希望生产表能够在开发数据库中查看这个新的起点,并将自身重新同步到开发状态。我认为我已经读过某个地方,生产数据库将自己与开发数据库匹配并自行更新。我相信生产数据库中有一个迁移文件,它与开发数据库中的文件相匹配 - 该文件明显不同步。我考虑过删除其中的数据,但我一直在等待,直到得到建议。

无论如何,我在Dev计算机中更改了迁移目录的名称,并将其从项目中排除。然后我在开发计算机上重新初始化我的表(在我的本地数据库中使用新的数据库名称)并使用初始化数据重新加载它。这一切都奏效了。

现在,我遇到了一个新问题,我的生产数据库和我的开发数据库是不同的,我在开发计算机中的迁移设置为创建新文件,而生产状态中的迁移期望较旧的迁移。每次我尝试使用开发计算机更新生产数据库时,我都会收到文件存在的错误 - 这当然是他们做的。

因此,我在迁移文件中注释掉了所有创建文件并重新尝试。现在,生产数据库将启动,但不会运行,因为更新的代码具有它所指的新字段,而这些字段未在生产数据库中创建。因此,在我的生产数据库中,我开始收到所有缺少的字段的错误。我试图使自动迁移成为现实,但是没有用。我猜,解决这个问题的唯一方法就是手动进行并逐个同步。

问题1:是否有一种自动同步(使用迁移)生产数据库和开发数据库的方法,以便它们与开发数据库相同?

问题2:考虑到上述情况,还有什么更好的方法可以用生产数据库重新设置迁移?

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。 Red-Gate的人们有一个很棒的SQL工具叫做SQL Compare。它比较了数据库文件结构,甚至只需点击一下按钮即可使它们完全相同。

但是,在使用它之前,请确保只比较表格#34;而不是包括"用户"和#34;角色"还有更多。这是因为当您运行软件时,它会备份,删除和重新创建,如果角色或用户被删除,软件将无法再访问数据库,一切都将被删除!还...做备份! (我第一次尝试时丢失了所有测试数据)

http://www.red-gate.com/products/sql-development/sql-compare/

(这不是Red-Gate的人们的销售插件。我不知道他们,但他们的工具对我帮助很大 - 它是一个很好的工具,易于使用,14天免费! - 我列出来了在这里,所以其他任何人,我相信有许多人,可能会像我一样被困在我身边。)

2015年4月24日

确定。在同步两个数据库之后还有更多内容,以便它们看起来完全相同。

  • 创建生产数据的备份*

  • 删除开发文件夹中的“迁移”文件夹。

  • 再次启用迁移
  • 添加初始迁移
  • 更新本地数据库
  • 现在您已完成本地设置 *

  • 转到主机数据库

  • 找到名为" __ MigrationHistory"在主持人/制作
  • 删除所有数据(您要清除它)(" __ MigrationHistory"(主持人))
  • 现在复制本地" __ MigrationHistory"的所有数据。托管" __ MigrationHistory" (将会有您的一行,即您在上面创建的第一行")
  • 现在数据已经保存,每个东西都会被同步,它会起作用。 您可以再次开始开发。