Beispiel #1
0
        /// <summary>
        /// Salva o registro informado no cache. Caso já exista, o mesmo será substituído.
        /// </summary>
        /// <param name="cache">Instancia do cache onde o registro será salvo.</param>
        /// <param name="keyFactory">Factory usado para criar as chave do registro no cache.</param>
        /// <param name="typeName">Nome do tipo que o registro representa.</param>
        /// <param name="record">Registro com os dados que serão salvos.</param>
        /// <param name="isUpdated">Identifica se ocorreu uma atualização.</param>
        /// <returns></returns>
        public static ulong Save(Cache cache, IRecordKeyFactory keyFactory, Colosoft.Reflection.TypeName typeName, CacheItemRecord record, out bool isUpdated)
        {
            var         keyGenerator     = keyFactory.CreateGenerator(typeName);
            var         key              = keyGenerator.GetKey(record);
            var         operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
            TypeInfoMap typeInfoMap      = cache.GetTypeInfoMap();
            var         handleId         = typeInfoMap.GetHandleId(typeName);

            isUpdated = false;
            if (typeInfoMap.GetAttribList(handleId).Count == 0)
            {
                return(0);
            }
            if (cache.Contains(key, operationContext))
            {
                cache.Remove(key, operationContext);
                isUpdated = true;
            }
            var queryInfo = GetCacheEntryQueryInfo(cache, typeInfoMap, record);
            var result    = cache.Insert(key, record, null, null, new Colosoft.Caching.Policies.PriorityEvictionHint(CacheItemPriority.Normal), null, null, queryInfo, new BitSet(), null, 0, LockAccessType.IGNORE_LOCK, null, null, operationContext);

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Recupera as informações de consulta para a entrada do cache
        /// </summary>
        /// <param name="cache">Instancia do cache.</param>
        /// <param name="typeInfoMap"></param>
        /// <param name="record"></param>
        /// <returns></returns>
        private static System.Collections.Hashtable GetCacheEntryQueryInfo(Cache cache, TypeInfoMap typeInfoMap, CacheItemRecord record)
        {
            var queryInfo = new System.Collections.Hashtable();

            if (typeInfoMap != null)
            {
                queryInfo["query-info"] = Colosoft.Caching.Loaders.CacheLoaderUtil.GetQueryInfo(record, typeInfoMap);
            }
            queryInfo["tag-info"] = Colosoft.Caching.Loaders.CacheLoaderUtil.GetTagInfo(record, new Tag[0]);
            var hashtable2 = Colosoft.Caching.Loaders.CacheLoaderUtil.GetNamedTagsInfo(record, new NamedTagsDictionary(), typeInfoMap);

            if (hashtable2 != null)
            {
                queryInfo["named-tag-info"] = hashtable2;
            }
            return(queryInfo);
        }