Appearance
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].Id3. 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-Database2. 检查迁移状态
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 StudioQ2: 多个 DbContext 如何选择?
解决:
powershell
# 列出所有 DbContext
PM> Get-Project | Select-Object -ExpandProperty DbContexts
# 使用 -Context 参数指定
PM> Update-Database -Context OrdersDbContextQ3: 迁移冲突怎么办?
解决:
powershell
# 1. 撤销本地迁移
PM> Remove-Migration
# 2. 拉取最新代码
# Git Pull...
# 3. 重新生成迁移
PM> Add-Migration MergeWithLatest
# 4. 应用到数据库
PM> Update-DatabasePMC vs .NET CLI 对比
| 功能 | PMC | .NET CLI |
|---|---|---|
| 平台 | Windows (VS) | 跨平台 |
| 命令前缀 | Add-Migration | dotnet 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
掌握这些命令,可以高效管理数据库迁移! 🚀