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());
        }
Exemple #6
0
        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());
        }