我正在设置Azure发布管道,作为发布的一部分,我需要执行任何挂起的DB迁移。
我已经在互联网上搜索了一个多小时,我能找到的都是关于dotnet Core的,而数据库是.Net Framework上的EF6,而不是dotnet Core(我以前为Core做过几次(。
在我看来,问题是EF6使用Visual Studio的内置包管理器控制台工作——这在Azure管道中并不存在;这是Visual Studio的怪异之处。
我似乎有几种方法可以在脑海中剥这只猫的皮,但我不知道如何在管道的背景下开始。。。
选项1:在管道上运行迁移-但是。。。怎样
选项2:SQL脚本-需要运行包管理器来生成它们,以便它们可以运行(如果我可以在管道上这样做,那么我无论如何都会运行它,所以这些脚本必须在本地创建,并使用代码提交,这在某种程度上是一种向后的解决方案IMO(
选项3:编写控制台应用程序-我真的必须这样做吗??
您可以尝试实体框架迁移扩展。
此任务允许构建/发布提供数据库连接参数,并针对数据库执行实体框架6迁移。
- 将您的项目构建到输出文件夹中,并包含Entity Framework 6附带的migrate.exe可执行文件
- 创建一个自动构建,将文件打包并使其在发布期间可访问
- 为相关生成创建发布定义
- 添加一个EF6迁移任务。一旦将该任务添加到版本中的环境中,您将需要输入适当的参数来配置它。所有文件路径参数都应该在生成的文件系统中,没有一个是TFS源代码管理路径
您也可以查看这篇文章。
这里的答案是使用ef6.exe命令行工具,并确保它与您的构建一起提供。
在Microsoft更新不存在的文档之前,这可能对这里的任何人都有用:http://github.com/dotnet/EntityFramework.Docs/issues/1740-这包含一个表,其中包含一种介于两者之间的转换矩阵。