EFCore数据库迁移命令

发布时间 2023-05-31 17:36:39作者: Light_Yang

前言

因为现在用.net core 开发新项目,过程中需要经常涉及到数据命令的迁移,今天分别整EFCore 的两种迁移数据库的方式

  1. 程序包管理器控制台 , Package Manager Console(PMC)
    如果你用visual studio 开发建议使用PMC迁移方式,该方式是同时支持efcore和原先的ef 迁移的
  2. 命令行工具 ,Command line interface (CLI)
    该方式适用于跨平台开发的时候进行迁移数据库的,也就是可脱离visual studio,比如你用vs code,或直接打开cmd控制台进行操作.

1 下面先列出两种方式对比,然后再分用vs 和vscode分别详细说明

迁移命令描述 CLI命令 PMC命令
创建迁移:migrationname为迁移名称 dotnet ef migrations add migrationName add-migration migrationName
移除迁移(删除最近的一次迁移) dotnet ef migrations remove remove-migration
应用所有的迁移(使迁移文件应用到数据库) dotnet ef database update update-database
指定版本进行迁移 dotnet ef database update migrationName update-database migrationName
生成对应版本的脚本 dotnet ef migrations script Script-Migration
查看迁移列表 dotnet ef migrations list
查看数据库上下文信息 dotnet ef dbcontext info

2 程序包管理器控制台 , Package Manager Console(PMC)

打开visual studio 程序包管理控制台,首先要善于使用pmc的帮助,输入get-help 查看帮助信息,根据提示我们可以输入 get-help about_entityframework 获取帮助信息,输入命令后我们应该能看到一只霸气的野马头像 ,头像下面就是efcore的相关帮助文档了 ,入下图

  1. add-migration 这个命令一般都不会有啥问题输入命令回车在输入迁移名称就ok
  2. remove-migration 这个也是如果想删除最后一次迁移 直接执行就好
  3. update-database 第一步添加一个迁移文件成功后,可以用该命令直接更新到数据库,默认是所有迁移,如果想指定迁移直接加上迁移文件的名字就好了,如:update-database migrationName,也相当于版本回滚操,比如有版本1,2,3 此时我想回滚到版本1 就直接 update-database 1,此时数据库中已经更新到1版本了,然后在两次remove-migration把2和3的迁移文件删除就好了
  4. Script-Migration 这个命令用于生成迁移文件对应的sql语句的,跟之前的ef貌似有些不一样,该命令如果不加任何参数 是默认生成所有迁移文件对应的sql语句,当然也参照格式指定餐宿
  5. Script-Migration -From migrationName1 -To migrationName2 -Context ContextName
  6. 有意思的是 ,它不会生成from对应的迁移文件的sql,也就是说想上面这么写只会生生成migrationName2的sql语句,那么问题来了 ,需要生成第一个迁移文件的sql怎么办?经过查看官方文档,需要指定from参数为0,也就是 Script-Migration -From 0
  7. 最后温馨提示 使用 Get-Help 即可获取对应命令文档,如 get-help update-databa

3 跨平台命令行工具 ,Command line interface (CLI)

打开vscode 命令终端 输入dotnet ef 后也能看到一直霸气野马的头像,也将列出相关帮助信息

  1. dotnet ef migrations add 生成一条迁移
  2. dotnet ef migrations remove 删除最新一次迁移
  3. dotnet ef database update 生成迁移到数据库,跟上面pmc命令类似 后面加指定的迁移作为参数可以进行版本的回滚
  4. dotnet ef migrations script 也跟pmc类似 如果没有任何参数的话默认是生成所有sql脚本,但是参数格式略有不同如下:dotnet ef migrations script migrationName1 migrationName2 ; 是像这样直接跟迁移名称的也就是生成migrationName1 到migrationName2 的sql脚本