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));
        }