SuperAPI AI 工具集

optimizing-ef-core-queries

编程与开发

查看项目

更新于 10-16 01:37

技能介绍

用途:当 EF Core 查询变慢、生成过多 SQL、日志出现 N+1 模式或大结果集造成内存压力时使用。不适用于 Dapper/ADO.NET、数据库侧问题(缺索引、表结构差)或从头构建数据访问层。

主要能力:提供从开启查询日志到修复具体问题的流程。步骤包括:用 LogTo 或日志类别 Microsoft.EntityFrameworkCore.Database.Command 查看实际 SQL;修复 N+1(Include 单查询、AsSplitQuery 拆分、或 Select 投影);只读查询用 AsNoTracking,重复实体用 AsNoTrackingWithIdentityResolution,可全局设 QueryTrackingBehavior.NoTracking;热点路径用 EF.CompileAsyncQuery 定义静态编译查询;避免 ToList 先于 Where、用 Any 代替 Count、投影时移除 Include、EF.Functions.Like、避免在 Select 内 ToList 等陷阱;复杂查询可用 FromSqlInterpolated 参数化原始 SQL。

使用方式:按步骤配置日志、改写 LINQ、选择拆分或单查询策略,并对照验证清单检查查询数量、跟踪行为与客户端求值警告。

限制与注意:EnableSensitiveDataLogging 仅限开发;移除 Proxies 或禁用延迟加载以防静默 N+1;注意 HasQueryFilter 与 IgnoreQueryFilters;DbContext 保持 Scoped,勿缓存;批量更新用 EF Core 7+ 的 ExecuteUpdateAsync/ExecuteDeleteAsync;FromSqlRaw 避免字符串插值以防注入。具体版本相关行为与完整收益暂未提供。