使用CI CD进行项目发布时,我们通常需要 dotnet-ef 来更新数据库。 开发的时候我们更常用的是PMC
dotnet tool install --global dotnet-ef
添加特定版本的
dotnet tool install --global dotnet-ef --version 6.*
dotnet tool install --global dotnet-ef --version 5.*
跟据提示我们可能还需要设置环变量
setx PATH "%PATH%;C:\Users\malema\.dotnet\tools"
(新设置的环变量对当前的应用程序是无效的。需要新开一个命令行窗口)
dotnet ef migrations add name
dotnet ef migrations remove
如果这个Migration已被应用到数据库就需要使用 dotnet ef database update <上一个migrationName>
先去掉它
更新数据库到最近的版本
dotnet ef database update
更新数据库到某个版本, 用于回滚
dotnet ef database update <migrationName>
如遇使用了CD进行部署的话需要先配置一下数据库字符串 在linux环境下用下面的代码
export dbconnection='Data Source=127.0.0.1;Initial Catalog=MalemaEFCoreMigration;Persist Security Info=True;User Id=sa;Password=malema987^^%$'
dotnet ef migrations script
有两个默认的参数
dotnet ef migrations script xxxMigrationName
dotnet ef migrations script --idempotent
会生所有的Migration的脚本, 并且每一个变更之前会先判断该变更是不是已经存在了。 比如新建一张表,会先判断这张表是不是已经存在于数据库。
在 Azure piplelines 当中我们需要把这个文件扔到Artifact当中 我们可以写如下的代码
--output $(Build.ArtifactStagingDirectory)/migrations/scripts.sql
$(Build.ArtifactStagingDirectory)
这个是auzure pipleline获取 Artifact临时路径
dotnet ef database update --project ./src/dbmigation/dbmigration.csproj
如果没有使用这个参数的话。则默认查找当前目录下的项目文件。
error 1. 无法执行,因为找不到指定的命令或文件。 可能的原因包括: *内置的 dotnet 命令拼写错误。 *你打算执行 .NET 程序,但 dotnet-ef 不存在。
因为我们之前没有设置环境变量。 这个时候我们需要把执行 下面的命令把它卸载掉
dotnet tool uninstall --global dotnet-ef
error 2. To install missing framework, download: 在 azure 的 devops 上面碰到了这个问题。 项目是.net 5 但是 ci cd 的服务器 是 Ubuntu 22.04 它是没有自带.net5运行环境。 并且不能简单用 apt-get 来安装 .net 5 只能把服务器切回到 Ubuntu 20.04.