一篇搞定 dotnet ef:EF Core 常用命令与实战指南
时间:2026-08-21 10:16:30 420浏览 收藏
基础知识
| 项目 | 说明 |
|---|---|
| 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 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 | 预生成模型快照以提升启动速度 | 高性能场景 |
常用命令详解 + 示例
创建迁移
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 |
在多项目架构,比如分离
DAL/启动项目的架构中,有一点务必牢记,那就是必须同时指定--project和--startup-project。这是为什么呢?原因就在于,项目,也就是我们常说的目标项目,它是命令添加或删除文件的位置。默认情况下,当前目录中的项目就是目标项目,但我们可以通过--project选项来指定另一个项目作为目标项目。而启动项目呢,它是工具生成并运行的项目,这些工具必须在设计时执行应用程序代码,才能获取项目的相关信息,像数据库连接字符串以及模型的配置等。默认情况下,当前目录中的项目也是启动项目,同样地,我们也能够使用--startup-project选项来将另一个项目指定为启动项目。启动项目和目标项目一般是同一个项目,但在某些场景下,它们也可能是单独的项目,比如EF Core上下文和实体类位于.NET类库中,而.NET控制台应用或Web应用引用了这个类库,或者将迁移代码放置在独立于EF Core上下文的类库中。所以,在多项目架构中,同时指定这两个参数是必不可少的哦。
应用迁移
dotnet ef database update
-
将数据库更新到最新迁移。
-
如果数据库不存在,会自动创建。
可指定版本:
dotnet ef database update InitialCreate
将数据库回滚到指定迁移(或升级到某个中间版本)。
查看迁移
dotnet ef migrations list
输出:
20250922121212_InitialCreate 20250923104530_AddUserTable
删除迁移
dotnet ef migrations remove
-
删除最新迁移文件。
-
仅限未执行
database update的迁移。
生成 SQL 脚本
dotnet ef migrations script
-
生成从初始数据库到最新迁移的
SQL脚本。 -
可指定起止迁移:
dotnet ef migrations script InitialCreate AddUserTable -o update.sql
删除数据库
dotnet ef database drop
-
交互式确认后删除数据库。
-
可加
--force跳过确认。
查看 DbContext 信息
dotnet ef dbcontext info
输出数据库提供程序、连接字符串等信息。
列出 DbContext
dotnet ef dbcontext list
用于多上下文项目,可快速确认可用的 DbContext。
数据库逆向生成实体 (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 转换) |
模型预编译优化
EF Core 6+ 提供:
dotnet ef dbcontext optimize
-
在编译时预生成模型元数据,提升启动速度。
-
适合大型数据库或高性能场景。
开发常用流程示例
Code First 开发流程
# 1. 添加初始迁移
dotnet ef migrations add InitialCreate
# 2. 创建/更新数据库
dotnet ef database update
# 3. 修改实体模型后生成新迁移
dotnet ef migrations add AddUserTable
# 4. 应用到数据库
dotnet ef database update
Database First 开发流程
# 从现有数据库生成实体与上下文
dotnet ef dbcontext scaffold
"Server=localhost;Database=MyDb;User Id=sa;Password=Passw0rd;"
Microsoft.EntityFrameworkCore.SqlServer
--output-dir Models
常见问题与技巧
| 问题 | 解决方案 |
|---|---|
找不到 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 脚本 |
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习
