博客 / 詳情

返回

一篇搞定 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

應用遷移

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.csUseSqlServer/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 腳本
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.