用途:针对 ABP Framework 中的 Entity Framework Core 数据访问进行 LINQ 查询优化,防止常见性能反模式。适用场景包括审查查询、修复慢接口、实现列表 API。
主要能力:
- 预加载(Eager Loading):通过 JOIN 在单次查询中加载关联实体(patterns/eager-loading.md)。
- 投影(Projection):在数据库层转换为 DTO(patterns/projection.md)。
- 批量加载(Batch Loading):一次查询为多个父实体加载关联数据(patterns/batch-loading.md)。
- 分页(Pagination):结合计数优化实现高效分页(patterns/pagination.md)。
需避免的反模式(均为 HIGH):N+1 查询、分页后再计数、全表加载、内存中连接。
核心规则:R001 在 Skip/Take 前执行 CountAsync();R002 在 ToListAsync() 前应用 Where;R003 关联实体用 Include 或批量加载,不在循环中查询;R004 DTO 返回使用 Select() 投影;R005 只读查询使用 AsNoTracking();R006 多个集合 Include 使用 AsSplitQuery()。
检测命令(在 src/ 下运行): grep -rn "foreach.*await.*Repository|for.await.GetAsync" src/ grep -rn ".Count().ToList|ToList..Count()" src/ grep -rn "GetListAsync()" src/ | grep -v "Where|Any|First" grep -rn "ToListAsync()..Where|GetListAsync..Where" src/
与其他技能协作:abp-code-reviewer、abp-developer、debugger;相关技能有 efcore-patterns、abp-framework-patterns、dotnet-async-patterns。
限制:资料未提供具体版本要求、安装命令、许可与收费信息。