Agent Skills: EF Core Skill

EF Core 操作與最佳化技能,協助開發者正確使用 Entity Framework Core,包含 DbContextFactory 模式、查詢最佳化、Migration 管理與反向工程。

UncategorizedID: yaochangyu/api.template/ef-core

Install this agent skill to your local

pnpm dlx add-skill https://github.com/yaochangyu/api.template/tree/HEAD/.claude/skills/ef-core

Skill Files

Browse the full folder contents for ef-core.

Download Skill

Loading file tree…

.claude/skills/ef-core/SKILL.md

Skill Metadata

Name
ef-core
Description
EF Core 操作與最佳化技能,協助開發者正確使用 Entity Framework Core,包含 DbContextFactory 模式、查詢最佳化、Migration 管理與反向工程。

⚠️ 前置條件

本 SKILL 須搭配閱讀:開發規則

EF Core Skill

描述

EF Core 操作與最佳化技能,協助開發者正確使用 Entity Framework Core,包含 DbContextFactory 模式、查詢最佳化、Migration 管理等。

職責

  • DbContextFactory 使用指導
  • 查詢最佳化(AsNoTracking、Include)
  • Migration 管理
  • 反向工程(Database First)

注意事項

EF Core 與 API 開發流程無關

Entity Framework Core 是資料存取基礎設施,不受「API First vs Code First」選擇影響:

  • API First:自動產生的 Handler 使用 Repository 存取 EF Core 實體
  • Code First:手動實作的 Handler 使用 Repository 存取 EF Core 實體
  • 結果:EF Core 操作與最佳化代碼完全相同

因此本 SKILL 未區分 API 開發流程,所有 EF Core 實作指導均適用於兩種方式。

👉 API 開發流程選擇 → 參考 /api-development SKILL

核心原則

1. DbContextFactory 模式

// ✅ 正確:使用 Factory 模式
public class Repository(IDbContextFactory<JobBankDbContext> dbContextFactory)
{
    public async Task<Result> OperationAsync(CancellationToken ct)
    {
        await using var dbContext = await dbContextFactory.CreateDbContextAsync(ct);
        // 使用 dbContext
    }
}

// ❌ 錯誤:直接注入 DbContext
public class Repository(JobBankDbContext dbContext) // 生命週期問題

2. 查詢最佳化

  • AsNoTracking:唯讀查詢使用
  • Include/ThenInclude:避免 N+1 查詢
  • Select 投影:只取需要的欄位
  • 分頁查詢:大量資料使用 Skip/Take

3. Migration 管理

# 建立 Migration
task ef-migration-add NAME=AddMemberTable

# 更新資料庫
task ef-database-update

# 反向工程
task ef-codegen

4. 交易管理

await using var transaction = await dbContext.Database.BeginTransactionAsync(ct);
try
{
    // 操作
    await transaction.CommitAsync(ct);
}
catch
{
    await transaction.RollbackAsync(ct);
    throw;
}

參考文件

實作範例

開發者應參考專案內的實際代碼:

DbContextFactory 使用範例

node .claude/skills/shared/FileResolver.js get-content \
  src/JobBank1111.Job.DB/JobBankDbContextFactory.cs

Repository 實作範例

node .claude/skills/shared/FileResolver.js get-content \
  src/JobBank1111.Job.DB/Repositories/MemberRepository.cs