public ImportResults Import() { ReportInformation(String.Format("Starting import from file \"{0}\".", this.InputPath)); ReportInformation(String.Format("Connecting to CRM server at {0}", this._factory.ServerUrl)); _crmService = _factory.GetCrmService(); ImportResults results = new ImportResults(); ImportData importData = DeserializeRecords(); MissingMetadata missingMetadata; if (IsMetadataMissing(importData, out missingMetadata)) { results.Success = false; results.MissingMetadata = missingMetadata; results.ErrorMessage = String.Format("CRM server is missing required metadata."); } else { try { ImportData invalidReferenceData = RemoveInvalidReferences(importData); _currentRecordCount = 0; _entityRecordCounts = importData.Entities.GroupBy(de => de.Name).ToDictionary(g => g.Key, g => 0); _totalRecordCount = importData.Entities.Count; if (invalidReferenceData != null) { _totalRecordCount += invalidReferenceData.Entities.Count; } ImportRecords(importData, "Importing"); if (invalidReferenceData != null) { ImportData unresolvableData = RemoveInvalidReferences(invalidReferenceData); if (unresolvableData != null) { IEnumerable <DynamicEntity> unresolvableEntities = unresolvableData.Entities .OrderBy(e => e.Name); foreach (DynamicEntity unresolvableEntity in unresolvableEntities) { ReportError(String.Format("Could not resolve references on {0} with id of {1}.", unresolvableEntity.Name, unresolvableEntity.Properties.OfType <KeyProperty>().First().Value.Value)); // still count these records towards our progress _currentRecordCount++; } } ImportRecords(invalidReferenceData, "Resolving references on"); } results.EntityResults = _entityRecordCounts.Select(pair => new EntityResult(pair.Key, pair.Value)); results.Success = true; } catch (SoapException ex) { results.Success = false; results.ErrorMessage = String.Format(ex.Detail.InnerText); ReportError(ex.ToString()); } catch (Exception ex) { results.Success = false; results.ErrorMessage = ex.Message; ReportError(ex.ToString()); } } return(results); }