public override void Handle(IBulkRestrictionCreatedOrUpdated command) { if (command.Data.Any()) { var newRestrictionModelItems = command.Data.ToList(); ValidateNewRestrictions(newRestrictionModelItems); var salesAreas = newRestrictionModelItems.SelectMany(x => x.SalesAreas) .Select(x => x.Trim()) .Distinct() .ToList(); _salesAreaRepository.ValidateSalesArea(salesAreas); var programmeCategoryNames = newRestrictionModelItems .Select(x => x.ProgrammeCategory) .Distinct(StringComparer.OrdinalIgnoreCase).ToList(); _programmeCategoryRepository.ValidateProgrammeCategory(programmeCategoryNames); var clearenceCodes = newRestrictionModelItems .Where(x => !string.IsNullOrWhiteSpace(x.ClearanceCode)) .Select(x => x.ClearanceCode) .Distinct(StringComparer.OrdinalIgnoreCase).ToList(); ValidateClearanceCodes(clearenceCodes); var newRestrictions = _mapper.Map <List <RestrictionDbObject> >(newRestrictionModelItems); var allSalesAreaQty = _salesAreaRepository.CountAll; foreach (var newRestriction in newRestrictions) { newRestriction.Uid = Guid.NewGuid(); if ((newRestriction.SalesAreas?.Any() ?? false) && newRestriction.SalesAreas.Count == allSalesAreaQty) { newRestriction.SalesAreas = new List <string>(); } } _restrictionRepository.UpdateRange(newRestrictions); _restrictionRepository.SaveChanges(); } }