public async virtual Task <Association[]> GetByIdsAsync(string[] itemIds) { var cacheKey = CacheKey.With(GetType(), nameof(GetByIdsAsync), string.Join("-", itemIds.OrderBy(x => x))); var result = await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { var rules = Array.Empty <Association>(); if (!itemIds.IsNullOrEmpty()) { using (var dynamicAssociationsRepository = _associationsRepositoryFactory()) { //Optimize performance and CPU usage dynamicAssociationsRepository.DisableChangesTracking(); var entities = await dynamicAssociationsRepository.GetAssociationsByIdsAsync(itemIds); rules = entities .Select(x => x.ToModel(AbstractTypeFactory <Association> .TryCreateInstance())) .ToArray(); cacheEntry.AddExpirationToken(AssociationCacheRegion.CreateChangeToken(itemIds)); } } return(rules); }); return(result); }
protected virtual void ClearCache(IEnumerable <Association> associations) { foreach (var association in associations) { AssociationCacheRegion.ExpireEntity(association); } AssociationSearchCacheRegion.ExpireRegion(); }