/// <summary> /// determines equality of two cache keys based on cache context values /// </summary> /// <param name="otherObject"></param> /// <returns></returns> public override bool Equals(object otherObject) { Debug.Assert(null != otherObject, "otherObject must not be null"); if (typeof(EntityClientCacheKey) != otherObject.GetType()) { return(false); } EntityClientCacheKey otherEntityClientCacheKey = (EntityClientCacheKey)otherObject; return((_commandType == otherEntityClientCacheKey._commandType && _parameterCount == otherEntityClientCacheKey._parameterCount) && Equals(otherEntityClientCacheKey._eSqlStatement, _eSqlStatement) && Equals(otherEntityClientCacheKey._parametersToken, _parametersToken)); }
/// <summary> /// Gets an entitycommanddefinition from cache if a match is found for the given cache key. /// </summary> /// <param name="entityCommandDefinition">out param. returns the entitycommanddefinition for a given cache key</param> /// <returns>true if a match is found in cache, false otherwise</returns> private bool TryGetEntityCommandDefinitionFromQueryCache(out EntityCommandDefinition entityCommandDefinition) { Debug.Assert(null != _connection, "Connection must not be null at this point"); entityCommandDefinition = null; // if EnableQueryCaching is false, then just return to force the CommandDefinition to be created if (!_enableQueryPlanCaching || string.IsNullOrEmpty(_esqlCommandText)) { return false; } // Create cache key var queryCacheKey = new EntityClientCacheKey(this); // Try cache lookup var queryCacheManager = _connection.GetMetadataWorkspace().GetQueryCacheManager(); Debug.Assert(null != queryCacheManager, "QuerycacheManager instance cannot be null"); if (!queryCacheManager.TryCacheLookup(queryCacheKey, out entityCommandDefinition)) { // if not, construct the command definition using no special options; entityCommandDefinition = CreateCommandDefinition(); // add to the cache QueryCacheEntry outQueryCacheEntry = null; if (queryCacheManager.TryLookupAndAdd(new QueryCacheEntry(queryCacheKey, entityCommandDefinition), out outQueryCacheEntry)) { entityCommandDefinition = (EntityCommandDefinition)outQueryCacheEntry.GetTarget(); } } Debug.Assert(null != entityCommandDefinition, "out entityCommandDefinition must not be null"); return true; }