/// <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); }
/// <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); }