public OperationResult <OrganizationModel> UpdateOrganization(UpdateOrganizationRequest request) { var existingOrganization = _organizationRepository.GetById(request.ID); if (existingOrganization == null || existingOrganization.IsDeleted) { return(new OperationResult <OrganizationModel>(false, Constants.Messages.ORGANIZATION_DONT_EXIST)); } if (request.IncludeHostname) { foreach (var hostName in request.HostNames) { var existingHost = _hostDefinitionRepository.FindByName(hostName); if (existingHost != null && existingHost.OrganizationId != existingOrganization.ID) { return(new OperationResult <OrganizationModel>(false, Constants.Messages.ORGANIZATION_DUPLICATE_HOST)); } } } var address = new Address(); address.AddressLine = request.AddressLine; address.CountryId = request.CountryId; address.ProvinceId = request.ProvinceId; address.DistrictId = request.DistrictId; Address newAddress; if (request.AddressId == 0) { newAddress = _addressRepository.Insert(address); } else { address.ID = existingOrganization.AddressId; newAddress = _addressRepository.Update(address); } _addressRepository.SaveChanges(); var organization = request.ToEntity(); organization.AddressId = newAddress.ID; _organizationRepository.Update(organization); _organizationRepository.SaveChanges(); if (request.IncludeHostname) { var organizationHosts = _hostDefinitionRepository.GetByOrganization(existingOrganization.ID); foreach (var oldHost in organizationHosts) { if (request.HostNames.All(x => !x.Equals(oldHost.HostName, StringComparison.OrdinalIgnoreCase))) { _hostDefinitionRepository.Delete(oldHost.ID); } } foreach (var newHost in request.HostNames) { if (organizationHosts.All(x => !x.HostName.Equals(newHost, StringComparison.OrdinalIgnoreCase))) { _hostDefinitionRepository.Insert(new HostDefinition() { HostName = newHost, OrganizationId = existingOrganization.ID }); } } _hostDefinitionRepository.SaveChanges(); } return(new OperationResult <OrganizationModel>(existingOrganization.ToModel(), true)); }