public virtual async Task DeleteAsync(string[] categoryIds) { var categories = await GetByIdsAsync(categoryIds, CategoryResponseGroup.Info.ToString()); var changedEntries = categories .Select(c => new GenericChangedEntry <Category>(c, EntryState.Deleted)) .ToList(); using (var repository = _repositoryFactory()) { await _eventPublisher.Publish(new CategoryChangingEvent(changedEntries)); await repository.RemoveCategoriesAsync(categoryIds); await repository.UnitOfWork.CommitAsync(); CategoryCacheRegion.ExpireRegion(); await _eventPublisher.Publish(new CategoryChangedEvent(changedEntries)); } }
public virtual async Task SaveChangesAsync(Category[] categories) { var pkMap = new PrimaryKeyResolvingMap(); var changedEntries = new List <GenericChangedEntry <Category> >(); await ValidateCategoryPropertiesAsync(categories); using (var repository = _repositoryFactory()) { var dbExistCategories = await repository.GetCategoriesByIdsAsync(categories.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), CategoryResponseGroup.Full); foreach (var category in categories) { var originalEntity = dbExistCategories.FirstOrDefault(x => x.Id == category.Id); var modifiedEntity = AbstractTypeFactory <CategoryEntity> .TryCreateInstance().FromModel(category, pkMap); if (originalEntity != null) { changedEntries.Add(new GenericChangedEntry <Category>(category, originalEntity.ToModel(AbstractTypeFactory <Category> .TryCreateInstance()), EntryState.Modified)); modifiedEntity.Patch(originalEntity); //Force set ModifiedDate property to mark a product changed. Special for partial update cases when product table not have changes originalEntity.ModifiedDate = DateTime.UtcNow; } else { repository.Add(modifiedEntity); changedEntries.Add(new GenericChangedEntry <Category>(category, EntryState.Added)); } } await _eventPublisher.Publish(new CategoryChangingEvent(changedEntries)); await repository.UnitOfWork.CommitAsync(); pkMap.ResolvePrimaryKeys(); CategoryCacheRegion.ExpireRegion(); await _eventPublisher.Publish(new CategoryChangedEvent(changedEntries)); } }