一篇搞定 dotnet ef:EF Core 常用命令与实战指南
基础知识
| 项目 | 说明 |
|---|---|
| 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 脚本 |
C#.NET 索引器完全解析:语法、场景与最佳实践
- 上一篇
- C#.NET 索引器完全解析:语法、场景与最佳实践
- 下一篇
- Linux systemd 服务崩溃后怎么保留现场:core 记录、信号与调试符号核对
-
- 文章 · 软件教程 | 2小时前 | github · 故障排查 · CI/CD · gitHub actions · GitHub Actions 失败任务 Job workflow run 重跑任务
- GitHub Actions 怎么手动重跑单个失败任务
- 162浏览 收藏
-
- 文章 · 软件教程 | 10小时前 | 开发环境 · vs code · VS Code Docker Compose Dockerfile devcontainer.json Dev Containers
- VS Code Dev Containers 修改配置后怎么完整重建容器
- 368浏览 收藏
-
- 文章 · 软件教程 | 14小时前 | vs code · 软件教程 · VS Code 设置同步 Profiles Settings Sync 扩展同步
- VS Code Profiles 怎么只同步指定扩展和设置
- 345浏览 收藏
-
- 文章 · 软件教程 | 20小时前 |
- VS Code 提示仓库不安全时怎么处理 safe.directory
- 199浏览 收藏
-
- 文章 · 软件教程 | 22小时前 | docker · Context ·
- Docker Context 怎么切换远程守护进程
- 372浏览 收藏
-
- 文章 · 软件教程 | 1天前 | 命令行 · 效率工具 · github · 开发工具 · 软件教程 · 位置参数 命令别名 GitHub CLI gh alias set shell alias
- GitHub CLI 怎么创建带参数的命令别名
- 404浏览 收藏
-
- 文章 · 软件教程 | 1天前 | obsidian · 软件教程 · YAML Properties Obsidian 笔记元数据 属性类型 Properties视图
- Obsidian Properties 怎么统一管理笔记元数据
- 378浏览 收藏
-
- 文章 · 软件教程 | 1天前 | postman · 软件教程 · 接口测试 · 环境变量 初始值 Postman 当前值 Local value Shared value
- Postman 环境变量怎么区分初始值与当前值
- 360浏览 收藏
-
- 文章 · 软件教程 | 1天前 | CI/CD · gitHub actions · 软件教程 · GitHub GitHub Actions 构件保留时间
- GitHub Actions 怎么设置构件保留时间
- 395浏览 收藏
-
- 文章 · 软件教程 | 1天前 | git · 软件教程 · Git Git worktree worktree prune
- Git worktree 怎么清理失效工作区记录
- 287浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 343次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 404次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 404次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 364次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 186次使用
-
- VS Code 怎么给 Go 项目配置测试任务:tasks.json 运行与结果验收
- 2026-07-09 501浏览
-
- Windows 11 如何开启 HEIF 图片支持
- 2026-05-31 501浏览
-
- TikTok用户画像与付费订阅变现方法
- 2026-05-27 501浏览
-
- 学信网学历翻译件申请方法
- 2026-05-27 501浏览
-
- Windows 11 24H2 更新失败0x80070005解决方法
- 2026-05-26 501浏览


