public virtual async Task SaveChangesAsync(SitemapItem[] sitemapItems) { if (sitemapItems == null) { throw new ArgumentNullException(nameof(sitemapItems)); } using (var repository = RepositoryFactory()) { var pkMap = new PrimaryKeyResolvingMap(); var itemsIds = sitemapItems.Select(x => x.Id).Where(x => x != null).Distinct().ToArray(); var existEntities = await repository.SitemapItems.Where(s => itemsIds.Contains(s.Id)).ToArrayAsync(); foreach (var sitemapItem in sitemapItems) { var changedEntity = AbstractTypeFactory <SitemapItemEntity> .TryCreateInstance().FromModel(sitemapItem, pkMap); var existEntity = existEntities.FirstOrDefault(x => x.Id == sitemapItem.Id); if (existEntity != null) { changedEntity.Patch(existEntity); } else { repository.Add(changedEntity); } } await repository.UnitOfWork.CommitAsync(); pkMap.ResolvePrimaryKeys(); } SitemapItemSearchCacheRegion.ExpireRegion(); }
public virtual async Task RemoveAsync(string[] itemIds) { if (itemIds == null) { throw new ArgumentNullException(nameof(itemIds)); } using (var repository = RepositoryFactory()) { var sitemapItemEntities = await repository.SitemapItems.Where(i => itemIds.Contains(i.Id)).ToArrayAsync(); if (sitemapItemEntities.Any()) { foreach (var sitemapItemEntity in sitemapItemEntities) { repository.Remove(sitemapItemEntity); } await repository.UnitOfWork.CommitAsync(); } } SitemapItemSearchCacheRegion.ExpireRegion(); }