与EF Code First迁移的持续集成

Kar*_*ran 16 migration continuous-integration entity-framework ef-code-first

我想知道是否可以自动执行完全代码优先迁移以进行持续集成.

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

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

例如:

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

我是否可以跳过迁移的生成,这样我就可以简单地将属性年龄添加到代码中,并且持续集成将生成此迁移.不确定是否建议这样做.

RMD*_*RMD 6

答案是肯定的,但不完全是你所描述的.

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

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

我最终创建了一个自定义工具,可以智能地执行迁移并自动确定要用于迁移的模型(上下文)程序集.您可以在此处了解如何执行此操作:EF Code First迁移以部署旧版本

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


Jir*_*uda 0

持续集成的一部分还包括在未通过测​​试的情况下回滚不良更改的可能性。

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

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