Пример #1
0
            private bool InitializeReader(DbContext _, bool result)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = relationalCommand.ExecuteReader(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _relationalCommandCache.ReaderColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger));

                _indexMap = BuildIndexMap(_columnNames, _dataReader.DbDataReader);

                _relationalQueryContext.InitializeStateManager(_performIdentityResolution);

                return(result);
            }
Пример #2
0
            private bool InitializeReader(DbContext _, bool result)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = relationalCommand.ExecuteReader(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _relationalCommandCache.ReaderColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger));

                _resultCoordinator = new SplitQueryResultCoordinator();

                _relationalQueryContext.InitializeStateManager(_standAloneStateManager);

                return(result);
            }
Пример #3
0
            private bool InitializeReader(DbContext _, bool result)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = relationalCommand.ExecuteReader(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _readerColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger));

                _indexMap = BuildIndexMap(_columnNames, _dataReader.DbDataReader);

                _resultCoordinator = new ResultCoordinator();

                return(result);
            }
Пример #4
0
            private async Task <bool> InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = await relationalCommand.ExecuteReaderAsync(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _relationalCommandCache.ReaderColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger),
                          cancellationToken)
                      .ConfigureAwait(false);

                _resultCoordinator = new SplitQueryResultCoordinator();

                _relationalQueryContext.InitializeStateManager(_standAloneStateManager);

                return(result);
            }
Пример #5
0
            private async Task <bool> InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(
                    _relationalQueryContext.ParameterValues);

                _dataReader
                    = await relationalCommand.ExecuteReaderAsync(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _readerColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger),
                          cancellationToken);

                _indexMap = BuildIndexMap(_columnNames, _dataReader.DbDataReader);

                _resultCoordinator = new ResultCoordinator();

                return(result);
            }
Пример #6
0
            private bool InitializeReader(DbContext _, bool result)
            {
                EntityFrameworkEventSource.Log.QueryExecuting();

                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader = relationalCommand.ExecuteReader(
                    new RelationalCommandParameterObject(
                        _relationalQueryContext.Connection,
                        _relationalQueryContext.ParameterValues,
                        _relationalCommandCache.ReaderColumns,
                        _relationalQueryContext.Context,
                        _relationalQueryContext.CommandLogger,
                        _detailedErrorsEnabled));

                _resultCoordinator = new SingleQueryResultCoordinator();

                _relationalQueryContext.InitializeStateManager(_standAloneStateManager);

                return(result);
            }
Пример #7
0
            private bool InitializeReader(DbContext _, bool result)
            {
                EntityFrameworkEventSource.Log.QueryExecuting();

                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = relationalCommand.ExecuteReader(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _relationalCommandCache.ReaderColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger));

                _indexMap = BuildIndexMap(_columnNames, _dataReader.DbDataReader);

                _relationalQueryContext.InitializeStateManager(_standAloneStateManager);

                return(result);
            }
Пример #8
0
            private async Task <bool> InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
            {
                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader
                    = await relationalCommand.ExecuteReaderAsync(
                          new RelationalCommandParameterObject(
                              _relationalQueryContext.Connection,
                              _relationalQueryContext.ParameterValues,
                              _relationalCommandCache.ReaderColumns,
                              _relationalQueryContext.Context,
                              _relationalQueryContext.CommandLogger),
                          cancellationToken)
                      .ConfigureAwait(false);

                _indexMap = BuildIndexMap(_columnNames, _dataReader.DbDataReader);

                _relationalQueryContext.InitializeStateManager(_performIdentityResolution);

                return(result);
            }
Пример #9
0
            private async Task <bool> InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
            {
                EntityFrameworkEventSource.Log.QueryExecuting();

                var relationalCommand = _relationalCommandCache.GetRelationalCommand(_relationalQueryContext.ParameterValues);

                _dataReader = await relationalCommand.ExecuteReaderAsync(
                    new RelationalCommandParameterObject(
                        _relationalQueryContext.Connection,
                        _relationalQueryContext.ParameterValues,
                        _relationalCommandCache.ReaderColumns,
                        _relationalQueryContext.Context,
                        _relationalQueryContext.CommandLogger,
                        _detailedErrorsEnabled),
                    cancellationToken)
                              .ConfigureAwait(false);

                _resultCoordinator = new SingleQueryResultCoordinator();

                _relationalQueryContext.InitializeStateManager(_standAloneStateManager);

                return(result);
            }
Пример #10
0
            public bool MoveNext()
            {
                try
                {
                    using (_relationalQueryContext.ConcurrencyDetector.EnterCriticalSection())
                    {
                        if (_dataReader == null)
                        {
                            var relationalCommand = _relationalCommandCache.GetRelationalCommand(
                                _relationalQueryContext.ParameterValues);

                            _dataReader
                                = relationalCommand.ExecuteReader(
                                      new RelationalCommandParameterObject(
                                          _relationalQueryContext.Connection,
                                          _relationalQueryContext.ParameterValues,
                                          _relationalQueryContext.Context,
                                          _relationalQueryContext.CommandLogger));

                            // Non-Composed FromSql
                            if (_columnNames != null)
                            {
                                var readerColumns = Enumerable.Range(0, _dataReader.DbDataReader.FieldCount)
                                                    .ToDictionary(i => _dataReader.DbDataReader.GetName(i), i => i, StringComparer.OrdinalIgnoreCase);

                                _indexMap = new int[_columnNames.Count];
                                for (var i = 0; i < _columnNames.Count; i++)
                                {
                                    var columnName = _columnNames[i];
                                    if (!readerColumns.TryGetValue(columnName, out var ordinal))
                                    {
                                        throw new InvalidOperationException(RelationalStrings.FromSqlMissingColumn(columnName));
                                    }

                                    _indexMap[i] = ordinal;
                                }
                            }
                            else
                            {
                                _indexMap = null;
                            }

                            _resultCoordinator = new ResultCoordinator();
                        }

                        var hasNext = _resultCoordinator.HasNext ?? _dataReader.Read();
                        Current = default;

                        if (hasNext)
                        {
                            while (true)
                            {
                                _resultCoordinator.ResultReady = true;
                                _resultCoordinator.HasNext     = null;
                                Current = _shaper(
                                    _relationalQueryContext, _dataReader.DbDataReader,
                                    _resultCoordinator.ResultContext, _indexMap, _resultCoordinator);
                                if (_resultCoordinator.ResultReady)
                                {
                                    // We generated a result so null out previously stored values
                                    _resultCoordinator.ResultContext.Values = null;
                                    break;
                                }

                                if (!_dataReader.Read())
                                {
                                    _resultCoordinator.HasNext = false;
                                    // Enumeration has ended, materialize last element
                                    _resultCoordinator.ResultReady = true;
                                    Current = _shaper(
                                        _relationalQueryContext, _dataReader.DbDataReader,
                                        _resultCoordinator.ResultContext, _indexMap, _resultCoordinator);

                                    break;
                                }
                            }
                        }

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

                    throw;
                }
            }