使用VSTS版本的特定于环境的EF6 Code First迁移

时间:2016-01-11 20:33:20

标签: entity-framework entity-framework-6 azure-devops ms-release-management

我有一个使用Entity Framework 6.x,ASP .NET WebApi 5.x的项目。数据访问位于解决方案内的辅助项目中。我想使用VSTS(也称为Visual Studio Online)构建并将其作为网站发布到集成/ dev,qa,stage和production的环境中。第9频道有一些很棒的视频可以处理通用的高级描述。 (例如https://channel9.msdn.com/Series/DevOps-Release-Managementhttps://channel9.msdn.com/Series/DevOps-Fundamentals/Infrastructure-as-Code)有关如何从Visual Studio内部进行迁移的各种文章和视频,包括生成脚本。

在网络上搜索我甚至找不到任何旧资源或具有代码优先迁移的持续部署的具体示例。 必须是自动迁移或SQL脚本以外的方法的示例和最佳实践。

我已配置Web部署包发布配置文件。我通过PublishProfile msbuild.exe指令使用它。该包将添加到工件中,然后由每个Release环境中的Azure Web App部署任务进行部署。但是,一旦构建了这个包,我不知道在每次将它发布到环境时更改构建包中的连接字符串的方法。

我可能会忽略一些东西,但是如何通过VSTS Release完成环境特定的迁移?

2 个答案:

答案 0 :(得分:0)

对于Code First Migration,您可以"编写App_Start代码来运行迁移"或"编写Web.config转换以配置MigrateDatabaseToLatestVersion初始化程序以运行",有关详细信息,请参阅此文章:http://blogs.msdn.com/b/webdev/archive/2014/04/09/ef-code-first-migrations-deployment-to-an-azure-cloud-service.aspx

对于带有配置文件的连接字符串转换,您需要为发布配置文件添加web.config文件,然后在此web.config中输入连接字符串。有关详细信息,请参阅此链接:http://awaitwisdom.com/publish-profile-config-transform/

答案 1 :(得分:0)

我不想在这里回答我自己的问题,但最终我的研究让我得出了我在here张贴的结论。在sort中,Web.config和Parameters.xml需要一些自定义脚本,这需要您维护自己的部署自动化。这些路线仍然需要您另外创建资源组或手动管理它们。

为了避免这些并发症并将工具和脚本拼凑在一起,可以使用两个JSON files来实现整个操作。这些JSON部署模板允许您在部署运行时创建或更新资源组。它们还允许您以与通过Azure门户相同的方式自动设置覆盖Web.config值的appsettings和connectiontrings。

步骤 :( 1)将two JSON文件添加到项目设置line 88上的连接字符串名称(2)添加Azure资源组部署任务到发布环境。 (3)在任务中设置模板(WebSite.json)和模板参数(WebSite.parameters.json)路径。 (4)将覆盖模板参数设置为-hostingPlanName "myHostingPlan" -webSiteName "myWebsiteName" -connectionString "the-actual-connection-string"(5),确保在Azure应用程序部署任务中使用相同的网站名称。

这取决于您的代码首次通过App_Start或类似方式运行。我接受了@ Eddie建议的第一部分,因为App_Start很容易处理,并且似乎不会经常运行。

作为奖励,您可以为任何此配置添加环境变量,以便您可以克隆环境,然后只需更改变量。这最终使您的应用程序或api连接字符串成为Release变量。