【问题标题】:Continuous Integration with EF Code First Migrations与 EF Code First 迁移持续集成
【发布时间】:2012-07-23 16:41:10
【问题描述】:

我想知道我是否可以完全自动化代码优先迁移以实现持续集成。

目前我的持续集成只是简单地更新代码更改,但是,我手动生成迁移,并更新我的持续集成服务器上的数据库。

生成迁移并自动更新数据库是否可靠/可能/推荐?

例如:

我的用户具有属性 userId 和用户名。然后我将属性年龄添加到代码中。当前方案需要我创建一个迁移来捕获此更改,然后我将我的更改签入到版本控制中。持续集成将发现这一变化,并将部署新版本。我必须手动更新数据库(应该是自动化的)。

我是否也可以跳过迁移的生成,这样我可以简单地将属性年龄添加到代码中,持续集成将生成此迁移。不确定这是否被推荐。

【问题讨论】:

    标签: entity-framework migration ef-code-first continuous-integration


    【解决方案1】:

    答案是肯定的,但与您描述的不太一样。

    您必须并且应该手动生成迁移。并非所有迁移都可以自动创建,在这些情况下,需要手动修改生成的迁移。列拆分、某些类型的数据类型更改等。

    然后,您的 CI 服务器可以利用 migrate.exe 使您的数据库与您的模型同步。棘手的部分是处理导致降级的迁移。所以从 v1 到 v2 很容易,但从 v2 回到 v1 比较棘手,因为只有 v2 程序集知道如何“回到”到 v1。

    我最终创建了一个自定义工具,该工具可以智能地执行迁移并自动确定要用于迁移的模型(上下文)程序集。你可以在这里了解如何做到这一点:EF Code First Migrations to Deploy Older Version

    最终结果是我可以签入模型更改/迁移,并且知道我的数据库更改将自动部署到属于我的 ci/cd 管道的任何环境 - 是的,这绝对包括生产。

    【讨论】:

      【解决方案2】:

      如果不通过测试,部分持续集成也可能会回滚错误的更改。

      • 您是否以可以降级的方式编写数据库升级脚本?
      • 您是否为每次提交创建一些保存点或备份?
      • 如果由于错误提交而进行备份/恢复,您会丢失数据库中的数据吗?
      • DDL 本身有什么不好的变化?

      这些是您在实施之前应该考虑的一些问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-18
        • 2015-04-01
        • 2019-08-27
        相关资源
        最近更新 更多