using System.Data.Common; namespace Database.Connection; /// /// Base class for Dapper-based repositories, providing shared connection creation for derived /// repository implementations. /// public abstract class DapperRepository(ISqlConnectionFactory connectionFactory) { /// /// Creates and opens a new database connection using the configured . /// /// Thrown when the connection cannot be opened. protected async Task CreateConnection() { DbConnection connection = connectionFactory.CreateConnection(); await connection.OpenAsync(); return connection; } /// /// Rolls back , swallowing any exception the rollback itself /// raises (for example when the provider has already completed the transaction after a /// connection failure) so the exception that triggered the rollback is what propagates. /// protected static async Task RollbackQuietlyAsync(DbTransaction transaction) { try { await transaction.RollbackAsync(); } catch { // Ignore: the original exception (rethrown by the caller) is what matters here. } } }