13

我想知道是否可以自动完成代码第一次迁移以实现持续集成。与EF代码首次迁移的持续集成

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

可靠/可能/建议生成迁移并自动更新数据库吗?

例如:

我与财产帐户及用户名用户。然后在代码中添加属性年龄。当前的场景需要我创建一个迁移来捕获这个变化,然后检查我对版本控制的更改。持续集成将发现这一变化,并将部署新版本。我必须手动更新数据库(应该是自动的)。

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

回答

0

持续集成的一部分,如果他们没有通过测试,也可以回滚坏的更改。

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

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

4

答案是肯定的,但不完全如何描述。

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

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

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

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