Entity framework Azure:在具有代码优先迁移的登台环境中进行测试的最佳实践

Entity framework Azure:在具有代码优先迁移的登台环境中进行测试的最佳实践,entity-framework,azure,entity-framework-migrations,Entity Framework,Azure,Entity Framework Migrations,我在Windows Azure中进行了以下设置: 连接到自己的“测试”数据库的“测试”托管服务 连接到其自己的“生产”数据库的“生产”托管服务 当一个构建在测试中得到验证并准备投入生产时,我们在生产托管服务中启动一个“暂存”部署,并进行快速冒烟测试,以确保新构建没有完全中断。登台实例使用将部署到生产中的确切位进行部署,因此它与生产数据库进行通信。当登台是幸运的,我们点击“VIP交换”按钮,构建是在生产现场进行的。一切都很好 当数据库模型发生更改时,问题就会出现。我的代码优先迁移工作得非常好。

我在Windows Azure中进行了以下设置:

  • 连接到自己的“测试”数据库的“测试”托管服务
  • 连接到其自己的“生产”数据库的“生产”托管服务
当一个构建在测试中得到验证并准备投入生产时,我们在生产托管服务中启动一个“暂存”部署,并进行快速冒烟测试,以确保新构建没有完全中断。登台实例使用将部署到生产中的确切位进行部署,因此它与生产数据库进行通信。当登台是幸运的,我们点击“VIP交换”按钮,构建是在生产现场进行的。一切都很好

当数据库模型发生更改时,问题就会出现。我的代码优先迁移工作得非常好。我可以添加新迁移,使用PackageManager控制台在本地应用它们,然后在推送新构建进行测试时生成SQL脚本以升级测试数据库。问题是,使用代码优先迁移和登台/生产部署的最佳实践是什么?当我使用模型更改将新构建部署到staging时,它希望找到与其模型匹配的数据库。但是,如果我将模型更改应用于生产数据库,生产实例会抱怨,因为它的模型不匹配

我刚刚跳过了烟雾测试。我上传到staging,然后更新生产数据库,几乎同时点击“VIP交换”按钮。然后对生产进行烟度测试。如果某些内容严重损坏,“交换VIP”并恢复数据库更改

有没有更好的方法来做到这一点,或者说基本上就是这样


谢谢

我不确定什么是最佳实践,因为我找不到任何最佳实践,而且似乎用户正在使用最适合他们的项目并为他们工作的最佳实践。在一个场景中,解决方案类似于您所描述的计划,其中生产DB ws empty和暂存数据库首先使用EF代码创建,然后应用迁移。测试完成后,脚本被传输到另一个数据库,该数据库随后与生产连接

我一直在研究Azure、EF等类似的话题,比如你。我不知道目前你的方案的最佳实践是什么。但是,我认为使用TFS和/或Github的持续集成工具可以将部署风险降至最低。我希望下面的文章能为您提供一个观点


祝你好运,谢谢。我希望我错过了一些神奇的东西,但似乎不是这样。我也遇到了同样的问题,我现在唯一能想到的就是禁用自动“升级到最新版本”,或者如果有办法区分暂存和生产,就扩展我自己的DbMigrator。最好的方法是以一个可以升级的暂存数据库为目标,然后在交换另一个数据库时。。但是,因为当你交换的时候没有什么真正的“发生”,我看不出会发生什么。这是真的被打破了。登台和迁移不兼容。在交换之前,无法迁移和预热临时web服务器。一旦应用迁移,生产web服务器就会停机。我假设实体框架能够处理渐进的更改(例如添加一个表)。看起来实现这一点的唯一方法是使用单独的暂存数据库。