public override async Task <TObject> ExecuteAsync(CancellationToken cancellationToken, object?state = null) { var result = new List <TObject>(); var executionToken = Prepare(); await executionToken.ExecuteAsync(async cmd => { using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior, cancellationToken).ConfigureAwait(false)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader, CommandBuilder.TryGetNonNullableColumns()); while (await reader.ReadAsync().ConfigureAwait(false)) { result.Add(factory(reader)); } return(result.Count); } }, cancellationToken, state).ConfigureAwait(false); if (result.Count == 0) { throw new MissingDataException($"No rows were returned. It was this expected, use `.ToObjectOrNull` instead of `.ToObject`."); } else if (result.Count > 1 && !m_RowOptions.HasFlag(RowOptions.DiscardExtraRows)) { throw new UnexpectedDataException($"Expected 1 row but received {result.Count} rows. Use {nameof(RowOptions)}.{nameof(RowOptions.DiscardExtraRows)} to suppress this error."); } return(result.First()); }
public override async Task <TObject> ExecuteAsync(CancellationToken cancellationToken, object state = null) { var result = new List <TObject>(); var executionToken = Prepare(); await executionToken.ExecuteAsync(async cmd => { using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess, cancellationToken).ConfigureAwait(false)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader, CommandBuilder.TryGetNonNullableColumns()); while (await reader.ReadAsync()) { result.Add(factory(reader)); } return(result.Count); } }, cancellationToken, state).ConfigureAwait(false); if (result.Count == 0) { if (m_RowOptions.HasFlag(RowOptions.AllowEmptyResults)) { return(null); } else { throw new DataException("No rows were returned"); } } else if (result.Count > 1 && !m_RowOptions.HasFlag(RowOptions.DiscardExtraRows)) { throw new DataException("Expected 1 row but received " + result.Count + " rows"); } return(result.First()); }
public override async Task <TCollection> ExecuteAsync(CancellationToken cancellationToken, object?state = null) { var result = new TCollection(); await Prepare().ExecuteAsync(async cmd => { using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess, cancellationToken).ConfigureAwait(false)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader, CommandBuilder.TryGetNonNullableColumns()); while (await reader.ReadAsync().ConfigureAwait(false)) { result.Add(factory(reader)); } return(result.Count); } }, cancellationToken, state).ConfigureAwait(false); return(result); }
public override TCollection Execute(object?state = null) { var result = new TCollection(); Prepare().Execute(cmd => { using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader, CommandBuilder.TryGetNonNullableColumns()); while (reader.Read()) { result.Add(factory(reader)); } return(result.Count); } }, state); return(result); }
public override TObject?Execute(object?state = null) { var result = new List <TObject>(); var executionToken = Prepare(); executionToken.Execute(cmd => { using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader, CommandBuilder.TryGetNonNullableColumns()); while (reader.Read()) { result.Add(factory(reader)); } return(result.Count); } }, state); if (result.Count == 0) { if (!m_RowOptions.HasFlag(RowOptions.PreventEmptyResults)) { return(null); } else { throw new MissingDataException($"No rows were returned and {nameof(RowOptions)}.{nameof(RowOptions.PreventEmptyResults)} was enabled."); } } else if (result.Count > 1 && !m_RowOptions.HasFlag(RowOptions.DiscardExtraRows)) { throw new UnexpectedDataException($"Expected 1 row but received {result.Count} rows. Use {nameof(RowOptions)}.{nameof(RowOptions.DiscardExtraRows)} to suppress this error."); } return(result.First()); }
public override TObject Execute(object state = null) { var result = new List <TObject>(); var executionToken = Prepare(); executionToken.Execute(cmd => { using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { var factory = CompiledMaterializers.CreateBuilder <TObject>(DataSource, cmd.CommandText, reader); while (reader.Read()) { result.Add(factory(reader)); } return(result.Count); } }, state); if (result.Count == 0) { if (m_RowOptions.HasFlag(RowOptions.AllowEmptyResults)) { return(null); } else { throw new DataException("No rows were returned"); } } else if (result.Count > 1 && !m_RowOptions.HasFlag(RowOptions.DiscardExtraRows)) { throw new DataException("Expected 1 row but received " + result.Count + " rows"); } return(result.First()); }