public override async Task <CustomerDto> Update(CustomerUpdateDto input) { //var output = await base.Update(input); //return output; CheckUpdatePermission(); var entity = await GetEntityByIdAsync(input.Id); MapToEntity(input, entity); #region Customer Category Setting // Assemble category. entity.CustomerCategorySettings = new List <CustomerCategorySetting>(); // 1. Get old category. List <CustomerCategorySetting> settings = customerCategorySettingRepository.GetAll() .Where(t => t.CustomerId == input.Id) .ToList(); // Get the category from database that had already existed. foreach (var item in settings) { if (input.CategorySettings.Contains(item.CategoryCode)) { // this category still alive. and ignore it for add. input.CategorySettings.Remove(item.CategoryCode); } else { // remove from local list object. // xx settings.Remove(item); // remove from database. customerCategorySettingRepository.Delete(item.Id); } } // Get the surplus category from input, that need to be added in database. foreach (var code in input.CategorySettings) { CustomerCategory category = customerCategoryRepository.FirstOrDefault(t => t.Code == code); customerCategorySettingRepository.Insert(new CustomerCategorySetting { CustomerCategoryId = category.Id, CustomerId = entity.Id, TenantId = this.AbpSession.TenantId, CreatorUserId = this.AbpSession.UserId, IsActive = true, Status = 0 }); } #endregion await CurrentUnitOfWork.SaveChangesAsync(); return(MapToEntityDto(entity)); }
public void UpdateCategory(long id, List<long> ids) { List<long> categoryIds = ids; /* TODO: 验证了一下下面的写法,结果删除上有问题 foreach (var key in ids) { categoryIds.Add(long.Parse(key)); } // Delete all setting customerCategorySettingRepository.Delete(t => t.CustomerId == id); // Insert new setting foreach(var key in categoryIds) { customerCategorySettingRepository.Insert(new CustomerCategorySetting { CustomerId = id, CustomerCategoryId = key }); } // Delete the removed. customerCategorySettingRepository.Delete( t => t.CustomerId == id && categoryIds.Contains(t.CustomerCategoryId) == false ); // Add new. foreach(var key in categoryIds) { if (customerCategorySettingRepository.Count(t => t.CustomerId == id && t.CustomerCategoryId == key) == 0) { customerCategorySettingRepository.Insert(new CustomerCategorySetting { CustomerId = id, CustomerCategoryId = key }); } } */ var list = customerCategorySettingRepository.GetAllList(t => t.CustomerId == id); foreach(var item in list) { if (categoryIds.Contains(item.CustomerCategoryId)) { categoryIds.Remove(item.CustomerCategoryId); // 去掉已经存在的 continue; } else { // If old item is not exist, delete it from database. customerCategorySettingRepository.Delete(item); } } // categoryIds will only exist new creation items, add them to database. foreach(var item in categoryIds) { customerCategorySettingRepository.Insert(new CustomerCategorySetting { CustomerId = id, CustomerCategoryId = item }); } }