很多人第一次接触 dotnet ef,卡住的并不是命令本身,而是不清楚它到底依赖什么、该在什么项目里执行、出了问题该往哪查。本文按日常开发顺序,把 EF Core 常用命令、参数差异和两类典型流程放到一起讲清楚,读完你不仅能直接上手,也能判断多项目架构、生产部署和逆向工程时该怎么选命令。
先弄清楚:dotnet ef 是什么,执行前需要什么
EF Core 是 .NET 的 ORM 框架,支持 Code First 和 Database First;dotnet ef 则是配套的 CLI 工具,用来处理迁移、数据库更新、逆向生成实体以及上下文诊断等工作。

在真正执行命令前,有两个前提需要确认:
| 项目 | 说明 |
|---|---|
| EF Core | .NET 的 ORM 框架,支持 Code First、Database First。 |
| dotnet ef | 一个 CLI 工具,用于管理 EF Core 迁移、数据库操作。 |
| 安装方式 | 通常安装在项目中(推荐):dotnet add package Microsoft.EntityFrameworkCore.Design全局工具: dotnet tool install --global dotnet-ef |
| 使用位置 | 在包含 *.csproj 的目录执行,或者使用 --project 指定项目路径。 |
要想执行任何
dotnet ef命令,都得先在csproj中包含Microsoft.EntityFrameworkCore.Design包。
dotnet ef 常用命令一览
如果你只想先建立一个整体认知,下面这张表基本覆盖了日常开发里最常用的命令。

| 命令 | 作用 | 典型场景 |
|---|---|---|
dotnet ef migrations add | 添加新的数据库迁移 | 增加或修改实体模型后 |
dotnet ef migrations list | 查看已有迁移 | 确认数据库版本 |
dotnet ef migrations remove | 删除最新迁移 | 回滚刚添加但未应用的迁移 |
dotnet ef migrations script | 生成 SQL 脚本 | 手工执行迁移 |
dotnet ef database update | 更新数据库到指定迁移 | 同步数据库与模型 |
dotnet ef database drop | 删除数据库 | 重置开发环境 |
dotnet ef dbcontext info | 查看 DbContext 信息 | 调试上下文配置 |
dotnet ef dbcontext list | 列出可用 DbContext | 多上下文项目 |
dotnet ef dbcontext scaffold | 根据现有数据库生成实体 | Database First 逆向工程 |
dotnet ef dbcontext optimize | 预生成模型快照以提升启动速度 | 高性能场景 |
迁移相关命令怎么用
1. 创建迁移:模型变更后的第一步
dotnet ef migrations add InitialCreate
执行后会在 Migrations/ 目录下生成两类关键文件:
YYYYMMDDHHMMSS_InitialCreate.cs:迁移代码AppDbContextModelSnapshot.cs:模型快照文件
常用参数如下:
| 参数 | 说明 | 示例 |
|---|---|---|
--project | 指定目标项目 | --project ./MyApp |
--startup-project | 指定包含 Program.cs 的启动项目 | --startup-project ./MyApp.Web |
--context | 指定 DbContext | --context AppDbContext |
--output-dir | 指定迁移文件夹 | --output-dir Data/Migrations |
多项目架构里,
--project和--startup-project往往要同时指定。前者决定迁移文件加到哪里,后者决定工具在设计时从哪个启动项目读取配置、连接字符串和模型设置。若 EF Core 上下文和实体放在类库,而 Web/Console 项目负责启动,这两个参数通常缺一不可。
2. 应用迁移:把模型同步到数据库
dotnet ef database update
- 将数据库更新到最新迁移。
- 如果数据库不存在,会自动创建。
如果你要升级或回滚到某个特定版本,可以直接指定迁移名:
dotnet ef database update InitialCreate
这条命令会把数据库调整到指定迁移对应的状态,而不一定总是更新到最新版本。
3. 查看、删除和导出迁移脚本
先看历史迁移:
dotnet ef migrations list
输出示例:
20250922121212_InitialCreate
20250923104530_AddUserTable
如果刚创建的迁移还没执行过,可以删除最后一条迁移:
dotnet ef migrations remove
- 删除最新迁移文件。
- 仅限未执行
database update的迁移。
如果生产环境不能直接跑 CLI,更常见的做法是先导出 SQL:
dotnet ef migrations script
- 生成从初始数据库到最新迁移的
SQL脚本。 - 也可以指定起止迁移范围。
dotnet ef migrations script InitialCreate AddUserTable -o update.sql
DbContext 诊断与数据库管理命令
删除数据库
dotnet ef database drop
- 交互式确认后删除数据库。
- 可加
--force跳过确认。
这条命令更适合本地开发环境重置,不适合直接拿到生产环境使用。
查看上下文信息和可用上下文
调试配置时,先看当前上下文解析到了什么:
dotnet ef dbcontext info
输出数据库提供程序、连接字符串等信息。
如果一个解决方案里有多个上下文,可以先列出来:
dotnet ef dbcontext list
这在多上下文项目里很有用,能快速确认可用的 DbContext 名称。
模型预编译优化
EF Core 6+ 提供了模型预编译能力:
dotnet ef dbcontext optimize
- 在编译时预生成模型元数据,提升启动速度。
- 更适合大型数据库或高性能场景。
Database First:如何从现有数据库生成实体
如果项目不是从实体出发,而是要接入一个已经存在的数据库,可以使用逆向工程:
dotnet ef dbcontext scaffold
"Server=localhost;Database=MyDb;User Id=sa;Password=Passw0rd;"
Microsoft.EntityFrameworkCore.SqlServer
--output-dir Models --context MyDbContext
常用参数:
| 参数 | 说明 |
|---|---|
--schema | 指定数据库模式 |
--table | 指定表(可多次指定) |
--context-dir | 指定 DbContext 文件夹 |
--force | 覆盖已有文件 |
--use-database-names | 保留数据库原始命名(不做 PascalCase 转换) |
这条命令适合已有数据库接入新项目,或者需要快速生成基础实体和上下文的场景。
两种最常见的开发流程
Code First 开发流程
# 1. 添加初始迁移
dotnet ef migrations add InitialCreate
# 2. 创建/更新数据库
dotnet ef database update
# 3. 修改实体模型后生成新迁移
dotnet ef migrations add AddUserTable
# 4. 应用到数据库
dotnet ef database update
这套流程适合实体模型由应用代码主导的项目,也是 EF Core 最常见的使用方式。
Database First 开发流程
# 从现有数据库生成实体与上下文
dotnet ef dbcontext scaffold
"Server=localhost;Database=MyDb;User Id=sa;Password=Passw0rd;"
Microsoft.EntityFrameworkCore.SqlServer
--output-dir Models
当数据库结构已经由外部系统或 DBA 维护时,这条路线通常更贴近真实项目分工。
常见问题与排查技巧
| 问题 | 解决方案 |
|---|---|
找不到 dotnet ef 命令 | dotnet tool install --global dotnet-ef |
| 提示找不到 DbContext | 检查 --startup-project 或 --context 是否指定正确 |
| 跨项目调用失败 | 使用 --project 指定包含迁移的类库项目,--startup-project 指定启动项目 |
| 数据库连接不生效 | 检查 Program.cs 中 UseSqlServer/UseNpgsql 配置 |
| 生产环境手动部署 | 使用 dotnet ef migrations script 生成 SQL 并在 DBA 审核后执行 |
最后再记住这几个高频命令
| 命令 | 场景 |
|---|---|
dotnet ef migrations add | 创建迁移 |
dotnet ef database update | 同步数据库 |
dotnet ef migrations list | 查看迁移历史 |
dotnet ef dbcontext scaffold | 逆向工程 |
dotnet ef migrations script | 生成 SQL 脚本 |
如果你平时主要做 Code First,优先熟悉 migrations add、database update 和 migrations script 这三条命令就够了;如果是接入既有库表,则重点放在 dbcontext scaffold 以及多项目参数配置上。














