Beispiel #1
0
        private DbDataReader HandleCaching(DbDataReader reader, string key, List <object[]> queryResults)
        {
            var cachedResult = new CachedRecords
            {
                TableMetadata   = GetTableMetadata(reader),
                Records         = queryResults,
                RecordsAffected = reader.RecordsAffected
            };

            int minCacheableRows, maxCachableRows;

            _policy.GetCacheableRows(_commandTreeFacts.AffectedEntitySets, out minCacheableRows, out maxCachableRows);

            if (IsQueryCached || (queryResults.Count >= minCacheableRows && queryResults.Count <= maxCachableRows))
            {
                TimeSpan?duration = _policy.GetExpirationTimeout(_commandTreeFacts.AffectedEntitySets);

                _cacheTransactionInterceptor.PutItem(
                    Transaction,
                    key,
                    cachedResult,
                    _commandTreeFacts.AffectedEntitySets.Select(s => s.Name),
                    duration);
            }

            return(new CachingDataReader(cachedResult));
        }
Beispiel #2
0
        internal CachingDataReader(CachedRecords cachedResult)
        {
            Guard.NotNull(cachedResult, nameof(cachedResult));

            _tableMetadata        = cachedResult.TableMetadata;
            _recordsAffected      = cachedResult.RecordsAffected;
            _resultRowsEnumerator = cachedResult.Records.GetEnumerator();
            _state = State.BOF;
        }