public async Task <IEnumerable <T> > ExecuteSelectAllAsync <T>(string sql, Func <IDatabaseResultReader, T> mappingFunc) where T : class, IRestResource { try { using (IDatabaseConnection connection = _sqlClassProvider.CreateSqlConnection(_connectionString)) using (IDatabaseCommand command = _sqlClassProvider.CreateSqlCommand(sql, connection)) { await connection.OpenAsync().ConfigureAwait(false); using (IDatabaseResultReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false)) { List <T> results = new List <T>(); while (await reader.ReadAsync().ConfigureAwait(false)) { results.Add(mappingFunc(reader)); } return(results); } } } catch (InvalidCastException ex) { throw InvalidConfigurationException.DataTypeMismatch(typeof(T).Name, ex); } }
public async Task <T> ExecuteSelectByIdAsync <T>( string sql, Func <IDatabaseResultReader, T> mappingFunc, Func <object, IDatabaseCommandParameter> paramProvider, object primaryKey) where T : class, IRestResource { try { using (IDatabaseConnection connection = _sqlClassProvider.CreateSqlConnection(_connectionString)) using (IDatabaseCommand command = _sqlClassProvider.CreateSqlCommand(sql, connection)) { command.AddParameter(paramProvider(primaryKey)); await connection.OpenAsync().ConfigureAwait(false); using (IDatabaseResultReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false)) { return(await reader.ReadAsync().ConfigureAwait(false) ? mappingFunc(reader) : default);