private void CreateChildVacanciesIfNeeded(Vacancy domain, VacancyDTO dto) { List <Vacancy> childVacancies = new List <Vacancy>(); if (dto.ChildVacanciesNumber.HasValue) { if (!domain.ChildVacancies.Any()) { if (dto.HasParent()) { throw new Exception("This vacancy has parent vacancy, so you can't create child of it"); } dto.ChildVacanciesNumber.Value.Times(() => { Vacancy childVacancy = new Vacancy(); childVacancy.UpdateChildWithParent(domain, uow); childVacancies.Add(childVacancy); }); } else if (dto.ChildVacanciesNumber.Value > domain.ChildVacancies.Count) { var additionalVacancyChildsNumber = dto.ChildVacanciesNumber.Value - domain.ChildVacancies.Count; additionalVacancyChildsNumber.Times(() => { Vacancy childVacancy = new Vacancy(); childVacancy.UpdateChildWithParent(domain, uow); childVacancies.Add(childVacancy); }); } childVacancies.ForEach(x => domain.ChildVacancies.Add(x)); } if (domain.ChildVacanciesNumber < domain.ChildVacancies.Count) { domain.ChildVacanciesNumber = domain.ChildVacancies.Count; } }