using System.Data.Common; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.Diagnostics; public sealed class ReadCounter : DbCommandInterceptor { public int Reads { get; private set; } public void Reset() => Reads = 0; public override InterceptionResult ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) { Reads++; return result; } public override ValueTask> ReaderExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { Reads++; return ValueTask.FromResult(result); } }