using System.Data.Common; using Microsoft.EntityFrameworkCore.Diagnostics; namespace BuildFlow.Workflow.Tests.Performance; /// /// 只统计查询命令的 EF 拦截器,用于稳定验证查询次数不随输入规模增长。 /// public sealed class CountingCommandInterceptor : DbCommandInterceptor { /// 自最近一次重置后的 SELECT 命令数。 public int SelectCount { get; private set; } /// 清零命令计数,排除测试建数阶段。 public void Reset() => SelectCount = 0; public override InterceptionResult ReaderExecuting( DbCommand command, CommandEventData eventData, InterceptionResult result) { Count(command); return result; } public override ValueTask> ReaderExecutingAsync( DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { Count(command); return ValueTask.FromResult(result); } private void Count(DbCommand command) { if (command.CommandText.TrimStart().StartsWith( "SELECT", StringComparison.OrdinalIgnoreCase)) { SelectCount++; } } }