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; } }
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); }