using EnvelopeGenerator.Application.Contracts.SQLExecutor; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace EnvelopeGenerator.Infrastructure.Executor; public sealed class SQLExecutor : SQLExecutor, ISQLExecutor where T : class { private readonly EGDbContext _context; private readonly IServiceProvider _provider; public SQLExecutor(EGDbContext context, IServiceProvider provider, IOptions options) : base(provider, options) { _context = context; _provider = provider; } public IQuery Execute(string sql, CancellationToken cancellation = default, params object[] parameters) => _context .Set() .FromSqlRaw(sql, parameters) .ToQuery(); public IQuery Execute(CancellationToken cancellation = default, params object[] parameters) where TSQL : ISQL { var sql = _provider.GetRequiredService(); return Execute(sql.Raw); } }