Exemplo n.º 1
0
        public virtual async Task <CustomerSegment[]> GetByIdsAsync(string[] ids)
        {
            var cacheKey = CacheKey.With(GetType(), nameof(GetByIdsAsync), string.Join("-", ids.OrderBy(x => x)));

            var result = await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry =>
            {
                var rules = Array.Empty <CustomerSegment>();

                if (!ids.IsNullOrEmpty())
                {
                    using var customerSegmentsRepository = _customerSegmentRepositoryFactory();

                    //Optimize performance and CPU usage
                    customerSegmentsRepository.DisableChangesTracking();

                    var entities = await customerSegmentsRepository.GetByIdsAsync(ids);

                    rules = entities
                            .Select(x => x.ToModel(AbstractTypeFactory <CustomerSegment> .TryCreateInstance()))
                            .ToArray();

                    cacheEntry.AddExpirationToken(CustomerSegmentCacheRegion.CreateChangeToken(ids));
                }

                return(rules);
            });

            return(result);
        }
Exemplo n.º 2
0
        protected virtual void ClearCache(IEnumerable <CustomerSegment> customerSegments)
        {
            foreach (var customerSegment in customerSegments)
            {
                CustomerSegmentCacheRegion.ExpireEntity(customerSegment);
            }

            CustomerSegmentSearchCacheRegion.ExpireRegion();
        }