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