首先将数据库迁移到代码优先 - 从发布切换到迁移

时间:2015-05-28 21:04:12

标签: entity-framework ef-code-first entity-framework-6 ef-database-first ef-migrations

我们需要将现有项目从数据库优先迁移到代码优先。每个环境(DEV,TEST,PROD)的数据库版本略有不同。不同之处在于可能未被推送到TEST和PROD的DEV的变化。

-

我们正在使用Entity Framework 6.1.3。

我们有一个数据库项目来部署数据库。发布操作将数据库与项目进行比较,并根据需要构建脚本以更改数据库。我们有一个带有edmx图的模型项目。我们从数据库更新edmx,这将根据数据库中的表生成实体。

我们正在用代码优先项目替换模型项目 t(使用edmx)。 数据库项目将消失,我们新的代码优先项目将进行迁移。

-

我们使用EF PowerTools对数据库进行逆向工程并创建模型。然后我们创建一个迁移,并添加创建数据库所需的语句。但是,当我们更新数据库时,它会崩溃,因为表已经存在。 接下来,我们创建了一个忽略更改的迁移。现在update-database什么都不做。这很好,因为一切都已存在。但是如果我需要部署到一个新的空数据库会发生什么?它不会创建任何这些对象。

使问题复杂化的是,从DEV中的逆向工程师拉入的一些对象不在TEST中。 TEST中的一些表可能在DEV中发生了变化。然后PROD也可能不同。

-

我们如何才能从数据库优先转换为代码优先,并且仍然拥有适用于所有环境的可靠流程,并且可以构建独立的数据库?

1 个答案:

答案 0 :(得分:2)

我会从您的最低基线开始,可能是PROD。将它附加到您的项目并生成迁移" Initial"管他呢。注释掉Up()代码和update-database。附加第二个最新的数据库,可能是TEST。再次执行update-database(初始化)。添加第二次迁移" TestChanges"。注释掉Up()代码和update-database。附加DEV数据库。应用第一次迁移(Update-Database -TargetMigration:Initial),应用第二次迁移。现在添加迁移" DevChanges",注释掉up代码,update-database。现在,您可以取消注释迁移代码或生成脚本以从以下任何一点获取:

Update-Database -Script -SourceMigration: Initial -TargetMigration: DevChanges

我可能会将迁移称为更有意义的东西。

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