public virtual async Task SavePricelistsAsync(Pricelist[] priceLists) { var pkMap = new PrimaryKeyResolvingMap(); using (var repository = _repositoryFactory()) { var pricelistsIds = priceLists.Select(x => x.Id).Where(x => x != null).Distinct().ToArray(); var alreadyExistEntities = await repository.GetPricelistByIdsAsync(pricelistsIds); foreach (var pricelist in priceLists) { var sourceEntity = AbstractTypeFactory <PricelistEntity> .TryCreateInstance().FromModel(pricelist, pkMap); var targetEntity = alreadyExistEntities.FirstOrDefault(x => x.Id == pricelist.Id); if (targetEntity != null) { sourceEntity.Patch(targetEntity); } else { repository.Add(sourceEntity); } } await repository.UnitOfWork.CommitAsync(); pkMap.ResolvePrimaryKeys(); foreach (var pricelist in priceLists) { PricelistsCacheRegion.ExpirePricelist(pricelist.Id); } ResetCache(); } }
public virtual async Task <Pricelist[]> GetPricelistsByIdAsync(string[] ids) { var cacheKey = CacheKey.With(GetType(), nameof(GetPricelistsByIdAsync), string.Join("-", ids)); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { Pricelist[] result = null; if (ids != null) { using (var repository = _repositoryFactory()) { var resultList = new List <Pricelist>(ids.Length); var pricelistEntities = await repository.GetPricelistByIdsAsync(ids); foreach (var pricelistEntity in pricelistEntities) { var pricelist = pricelistEntity.ToModel(AbstractTypeFactory <Pricelist> .TryCreateInstance()); cacheEntry.AddExpirationToken(PricelistsCacheRegion.CreateChangeToken(pricelist.Id)); resultList.Add(pricelist); } result = resultList.ToArray(); } } return result; })); }
public virtual async Task DeletePricelistsAsync(string[] ids) { using (var repository = _repositoryFactory()) { await repository.DeletePricelistsAsync(ids); await repository.UnitOfWork.CommitAsync(); foreach (var id in ids) { PricelistsCacheRegion.ExpirePricelist(id); } ResetCache(); } }