using EnvelopeGenerator.Application.Contracts.SQLExecutor.cs; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Infrastructure; public sealed class SQLExecutor : ISQLExecutor where T : class { private readonly EGDbContext _context; public SQLExecutor(EGDbContext context) { _context = context; } public async Task ExecuteFirstAsync(string sql, CancellationToken cancellation = default, params object[] parameters) => await _context .Set() .FromSqlRaw(sql, parameters) .FirstOrDefaultAsync(cancellation); public async Task ExecuteSingleAsync(string sql, CancellationToken cancellation = default, params object[] parameters) => await _context .Set() .FromSqlRaw(sql, parameters) .SingleOrDefaultAsync(cancellation); public async Task> ExecuteAllAsync(string sql, CancellationToken cancellation = default, params object[] parameters) => await _context .Set() .FromSqlRaw(sql, parameters) .ToListAsync(cancellation); }