public async Task <bool> MoveNext(CancellationToken cancellationToken)
                {
                    if (_dataReader == null)
                    {
                        await _relationalQueryContext.Connection.OpenAsync(cancellationToken);

                        try
                        {
                            var relationalCommand = _querySqlGenerator
                                                    .GetCommand(
                                _selectExpression,
                                _relationalQueryContext.ParameterValues,
                                _relationalQueryContext.CommandLogger);

                            _dataReader
                                = await relationalCommand.ExecuteReaderAsync(
                                      _relationalQueryContext.Connection,
                                      _relationalQueryContext.ParameterValues,
                                      _relationalQueryContext.CommandLogger,
                                      cancellationToken);
                        }
                        catch (Exception exception)
                        {
                            _logger.QueryIterationFailed(_contextType, exception);
                            // If failure happens creating the data reader, then it won't be available to
                            // handle closing the connection, so do it explicitly here to preserve ref counting.
                            _relationalQueryContext.Connection.Close();

                            throw;
                        }
                    }

                    try
                    {
                        var hasNext = await _dataReader.ReadAsync(cancellationToken);

                        Current
                            = hasNext
                                ? await _shaper(_relationalQueryContext, _dataReader.DbDataReader)
                                : default;

                        return(hasNext);
                    }
                    catch (Exception exception)
                    {
                        _logger.QueryIterationFailed(_contextType, exception);

                        throw;
                    }
                }
示例#2
0
                public bool MoveNext()
                {
                    if (_dataReader == null)
                    {
                        _relationalQueryContext.Connection.Open();

                        try
                        {
                            var relationalCommand = _querySqlGenerator
                                                    .GetCommand(
                                _selectExpression,
                                _relationalQueryContext.ParameterValues,
                                _relationalQueryContext.CommandLogger);

                            _dataReader
                                = relationalCommand.ExecuteReader(
                                      _relationalQueryContext.Connection,
                                      _relationalQueryContext.ParameterValues,
                                      _relationalQueryContext.CommandLogger);
                        }
                        catch
                        {
                            // If failure happens creating the data reader, then it won't be available to
                            // handle closing the connection, so do it explicitly here to preserve ref counting.
                            _relationalQueryContext.Connection.Close();

                            throw;
                        }
                    }

                    var hasNext = _dataReader.Read();

                    Current
                        = hasNext
                            ? _shaper(_relationalQueryContext, _dataReader.DbDataReader)
                            : default;

                    return(hasNext);
                }