Skip to content

PMC 命令参考 ​

概述 ​

Package Manager Console (PMC) 是 Visual Studio 中的 PowerShell 控制台,用于执行 EF Core 迁移和其他数据库管理命令。虽然 .NET CLI 更跨平台,但 PMC 在 Visual Studio 环境中仍然广泛使用。


环境准备 ​

打开 PMC ​

Visual Studio 菜单:
工具 → NuGet 包管理器 → 程序包管理器控制台

或使用快捷键: Ctrl+`, `

设置默认项目 ​

powershell
# 在 PMC 顶部下拉框选择包含 DbContext 的项目
# 或手动设置
PM> Get-Project

迁移命令 ​

1. Add-Migration (创建迁移) ​

语法:

powershell
Add-Migration <MigrationName> [-Context <DbContextType>] [-OutputDir <Path>]

示例:

powershell
# 基本用法
PM> Add-Migration InitialCreate

# 指定 DbContext
PM> Add-Migration AddUserTable -Context AppDbContext

# 指定输出目录
PM> Add-Migration AddProductTable -OutputDir "Migrations/Custom"

# 添加备注
PM> Add-Migration AddEmailColumn -Message "Add email field to users table"

参数说明:

  • MigrationName: 迁移名称(必填)
  • -Context: DbContext 类型名称
  • -OutputDir: 迁移文件输出目录
  • -Message: 迁移描述

2. Update-Database (应用迁移) ​

语法:

powershell
Update-Database [-Migration <TargetMigration>] [-Context <DbContextType>]

示例:

powershell
# 应用到最新迁移
PM> Update-Database

# 应用到指定迁移
PM> Update-Database -Migration "20240101_AddUsers"

# 回滚到初始状态(清空所有迁移)
PM> Update-Database -Migration 0

# 指定 DbContext
PM> Update-Database -Context AppDbContext

# 应用到特定迁移并显示 SQL
PM> Update-Database -Migration "AddProducts" -Verbose

常用场景:

powershell
# 查看将执行的 SQL(不实际应用)
PM> Update-Database -Script

# 回滚上一个迁移
PM> Update-Database -Migration (Get-Migrations)[-1].Id

3. Remove-Migration (删除迁移) ​

语法:

powershell
Remove-Migration [-Context <DbContextType>] [-Force]

示例:

powershell
# 删除最后一个未应用的迁移
PM> Remove-Migration

# 强制删除已应用的迁移(危险!)
PM> Remove-Migration -Force

# 指定 DbContext
PM> Remove-Migration -Context AppDbContext

注意:

  • ⚠️ 只能删除未应用到数据库的迁移
  • ⚠️ 使用 -Force 可能导致数据库与代码不同步

4. Get-Migrations (查看迁移列表) ​

语法:

powershell
Get-Migrations [-Context <DbContextType>]

示例:

powershell
# 查看所有迁移
PM> Get-Migrations

# 输出示例:
# Id                               Target Migration
# --                               ----------------
# 20240115080000_AddUsers          AddUsers
# 20240116090000_AddProducts       AddProducts
# 20240117100000_AddOrders         AddOrders

# 查看待应用的迁移
PM> Get-Migrations | Where-Object { $_.Status -eq "Pending" }

脚手架命令(Scaffolding) ​

5. Scaffold-DbContext (逆向工程) ​

语法:

powershell
Scaffold-DbContext "<ConnectionString>" <Provider> [-Tables <TableNames>] [-OutputDir <Path>]

示例:

powershell
# 从现有数据库生成所有表
PM> Scaffold-DbContext "Server=.;Database=MyDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer

# 只生成指定的表
PM> Scaffold-DbContext "Server=.;Database=MyDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Tables "Users","Products","Orders"

# 指定输出目录
PM> Scaffold-DbContext "..." Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Models/Generated"

# 使用复数形式的表名
PM> Scaffold-DbContext "..." Microsoft.EntityFrameworkCore.SqlServer -UseDatabaseNames

# 覆盖现有文件
PM> Scaffold-DbContext "..." Microsoft.EntityFrameworkCore.SqlServer -Force

# 生成 DbContext 和实体类
PM> Scaffold-DbContext "..." Microsoft.EntityFrameworkCore.SqlServer -Context "AppDbContext" -ContextDir "Data"

常用参数:

  • -Tables: 要生成的表名列表
  • -OutputDir: 实体类输出目录
  • -ContextDir: DbContext 输出目录
  • -Context: DbContext 类名
  • -Force: 覆盖现有文件
  • -UseDatabaseNames: 使用数据库中的确切名称
  • -NoPluralize: 不使用复数形式
  • -DataAnnotations: 使用数据注解而非 Fluent API

数据库命令 ​

6. Drop-Database (删除数据库) ​

语法:

powershell
Drop-Database [-Context <DbContextType>] [-WhatIf]

示例:

powershell
# 删除数据库
PM> Drop-Database

# 预览将执行的操作(不实际删除)
PM> Drop-Database -WhatIf

# 指定 DbContext
PM> Drop-Database -Context AppDbContext

警告: ⚠️ 此操作不可逆,会删除整个数据库!


7. Script-Migration (生成 SQL 脚本) ​

语法:

powershell
Script-Migration [-From <Migration>] [-To <Migration>] [-Idempotent]

示例:

powershell
# 生成从开始到最新的脚本
PM> Script-Migration

# 生成特定范围的脚本
PM> Script-Migration -From "20240101_Initial" -To "20240115_AddUsers"

# 生成幂等脚本(可安全重复执行)
PM> Script-Migration -Idempotent

# 保存到文件
PM> Script-Migration -Output "migration.sql" -Idempotent

应用场景:

  • 生产环境部署
  • DBA 审查变更
  • 版本控制系统记录

实用技巧 ​

1. 批量操作 ​

powershell
# 删除所有未应用的迁移
PM> while ((Get-Migrations | Where-Object Status -eq Pending).Count -gt 0) {
        Remove-Migration -Force
    }

# 应用所有待处理的迁移
PM> Update-Database

2. 检查迁移状态 ​

powershell
# 查看迁移历史
PM> Get-Migrations

# 查看数据库中的迁移
PM> Get-Migrations | Where-Object { $_.Status -eq "Applied" }

# 查看待应用的迁移
PM> Get-Migrations | Where-Object { $_.Status -eq "Pending" }

3. 自动化脚本 ​

powershell
# deploy.ps1 - 自动化部署脚本
param(
    [string]$Environment = "Production"
)

Write-Host "Deploying to $Environment..." -ForegroundColor Green

# 生成迁移脚本
$scriptFile = "migrations_$Environment.sql"
Script-Migration -Idempotent -Output $scriptFile

Write-Host "SQL script generated: $scriptFile" -ForegroundColor Yellow

# 提示手动执行(生产环境建议)
Write-Host "Please review and execute the script on $Environment database" -ForegroundColor Cyan

常见问题 ​

Q1: 找不到命令? ​

解决:

powershell
# 确保安装了 EF Core Tools
PM> Install-Package Microsoft.EntityFrameworkCore.Tools

# 重启 Visual Studio

Q2: 多个 DbContext 如何选择? ​

解决:

powershell
# 列出所有 DbContext
PM> Get-Project | Select-Object -ExpandProperty DbContexts

# 使用 -Context 参数指定
PM> Update-Database -Context OrdersDbContext

Q3: 迁移冲突怎么办? ​

解决:

powershell
# 1. 撤销本地迁移
PM> Remove-Migration

# 2. 拉取最新代码
# Git Pull...

# 3. 重新生成迁移
PM> Add-Migration MergeWithLatest

# 4. 应用到数据库
PM> Update-Database

PMC vs .NET CLI 对比 ​

功能PMC.NET CLI
平台Windows (VS)跨平台
命令前缀Add-Migrationdotnet ef migrations add
IntelliSense✅ 支持❌ 不支持
脚本化⚠️ 有限✅ 强大
CI/CD❌ 不适合✅ 推荐
学习成本低中

建议:

  • Visual Studio 开发 → 使用 PMC
  • 跨平台/CI/CD → 使用 .NET CLI

快速参考卡片 ​

powershell
# 创建迁移
Add-Migration <Name>

# 应用迁移
Update-Database

# 删除迁移
Remove-Migration

# 查看迁移
Get-Migrations

# 逆向工程
Scaffold-DbContext "<ConnStr>" Provider

# 生成脚本
Script-Migration -Idempotent

# 删除数据库
Drop-Database

总结 ​

PMC 是 Visual Studio 用户管理 EF Core 的便捷工具:

  • ✅ 集成在 IDE 中,使用方便
  • ✅ 支持 IntelliSense,减少拼写错误
  • ✅ 适合日常开发和调试
  • ⚠️ 仅限 Windows 和 Visual Studio
  • ⚠️ CI/CD 建议使用 .NET CLI

掌握这些命令,可以高效管理数据库迁移! 🚀

基于 MIT 许可发布