feat: SQLExecutor-Klasse für die Ausführung von Roh-SQL-Abfragen mit Entity Framework Core hinzufügen
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Contracts.SQLExecutor;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines methods for executing raw SQL queries and mapping the results to <typeparamref name="TEntity"/> objects.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TEntity">The entity type to which the SQL query results will be mapped.</typeparam>
|
||||||
|
public interface ISQLExecutor<TEntity>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Executes a raw SQL query and returns the first result or <c>null</c> if no result is found.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sql">The raw SQL query to execute.</param>
|
||||||
|
/// <param name="cancellation">Optional cancellation token.</param>
|
||||||
|
/// <param name="parameters">Optional parameters for the SQL query.</param>
|
||||||
|
/// <returns>The first <typeparamref name="TEntity"/> result, or <c>null</c> if none found.</returns>
|
||||||
|
Task<TEntity?> ExecuteFirstAsync(string sql, CancellationToken cancellation = default, params object[] parameters);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Executes a raw SQL query and expects a single result, or <c>null</c> if no result is found.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sql">The raw SQL query to execute.</param>
|
||||||
|
/// <param name="cancellation">Optional cancellation token.</param>
|
||||||
|
/// <param name="parameters">Optional parameters for the SQL query.</param>
|
||||||
|
/// <returns>The single <typeparamref name="TEntity"/> result, or <c>null</c> if none found.</returns>
|
||||||
|
Task<TEntity?> ExecuteSingleAsync(string sql, CancellationToken cancellation = default, params object[] parameters);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Executes a raw SQL query and returns all results as a collection of <typeparamref name="TEntity"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sql">The raw SQL query to execute.</param>
|
||||||
|
/// <param name="cancellation">Optional cancellation token.</param>
|
||||||
|
/// <param name="parameters">Optional parameters for the SQL query.</param>
|
||||||
|
/// <returns>An <see cref="IEnumerable{TEntity}"/> containing all matching results.</returns>
|
||||||
|
Task<IEnumerable<TEntity>> ExecuteAllAsync(string sql, CancellationToken cancellation = default, params object[] parameters);
|
||||||
|
}
|
||||||
@@ -80,4 +80,8 @@
|
|||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Procedures\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
32
EnvelopeGenerator.Infrastructure/SQLExecutor.cs
Normal file
32
EnvelopeGenerator.Infrastructure/SQLExecutor.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using EnvelopeGenerator.Application.Contracts.SQLExecutor.cs;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Infrastructure;
|
||||||
|
|
||||||
|
public sealed class SQLExecutor<T> : ISQLExecutor<T> where T : class
|
||||||
|
{
|
||||||
|
private readonly EGDbContext _context;
|
||||||
|
|
||||||
|
public SQLExecutor(EGDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T?> ExecuteFirstAsync(string sql, CancellationToken cancellation = default, params object[] parameters)
|
||||||
|
=> await _context
|
||||||
|
.Set<T>()
|
||||||
|
.FromSqlRaw(sql, parameters)
|
||||||
|
.FirstOrDefaultAsync(cancellation);
|
||||||
|
|
||||||
|
public async Task<T?> ExecuteSingleAsync(string sql, CancellationToken cancellation = default, params object[] parameters)
|
||||||
|
=> await _context
|
||||||
|
.Set<T>()
|
||||||
|
.FromSqlRaw(sql, parameters)
|
||||||
|
.SingleOrDefaultAsync(cancellation);
|
||||||
|
|
||||||
|
public async Task<IEnumerable<T>> ExecuteAllAsync(string sql, CancellationToken cancellation = default, params object[] parameters)
|
||||||
|
=> await _context
|
||||||
|
.Set<T>()
|
||||||
|
.FromSqlRaw(sql, parameters)
|
||||||
|
.ToListAsync(cancellation);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user