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)); }
internal CachingDataReader(CachedRecords cachedResult) { Guard.NotNull(cachedResult, nameof(cachedResult)); _tableMetadata = cachedResult.TableMetadata; _recordsAffected = cachedResult.RecordsAffected; _resultRowsEnumerator = cachedResult.Records.GetEnumerator(); _state = State.BOF; }