我们需要将现有项目从数据库优先迁移到代码优先.每个环境(DEV,TEST,PROD)的数据库版本略有不同.不同之处在于可能未被推送到TEST和PROD的DEV的变化.
–
我们正在使用Entity Framework 6.1.3.
我们有一个部署数据库的数据库项目.发布操作将数据库与项目进行比较,并根据需要构建脚本以更改数据库.我们有一个带有edmx图的模型项目.我们从数据库更新edmx,这将根据数据库中的表生成实体.
我们正在用代码优先项目替换模型项目(使用edmx).数据库项目将消失,我们新的代码优先项目将进行迁移.
–
我们使用EF PowerTools对数据库进行逆向工程并创建模型.然后我们创建一个迁移,并添加创建数据库所需的语句.但是,当我们更新数据库时,它会崩溃,因为表已经存在.
接下来,我们创建了一个忽略更改的迁移.现在update-database什么都不做.这很好,因为一切都已存在.但是如果我需要部署到一个新的空数据库会发生什么?它不会创建任何这些对象.
更复杂的是,从DEV中的逆向工程师引入的一些对象不在TEST中. TEST中的一些表可能在DEV中发生了变化.然后PROD也可能不同.
–
我们如何从数据库优先转换到代码优先,并且仍然拥有适用于所有环境的可靠流程,并且可以构建独立的数据库?
最佳答案 我会从你的最低基线开始,可能是PROD.将它附加到您的项目并生成迁移“初始”或其他.注释掉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
我可能会称迁移更有意义.