| 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 模式
public class Repository(IDbContextFactory<JobBankDbContext> dbContextFactory)
{
public async Task<Result> OperationAsync(CancellationToken ct)
{
await using var dbContext = await dbContextFactory.CreateDbContextAsync(ct);
}
}
public class Repository(JobBankDbContext dbContext)
2. 查詢最佳化
- AsNoTracking:唯讀查詢使用
- Include/ThenInclude:避免 N+1 查詢
- Select 投影:只取需要的欄位
- 分頁查詢:大量資料使用 Skip/Take
3. 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