public TableMappingDefinition(SourceTable sourceTable, DestinationTable destinationTable, List<FieldMappingConfiguration> explicitMappings = null) { _sourceTable = sourceTable; _destinationTable = destinationTable; bool hasExplicitMappings = explicitMappings != null; destinationTable.Fields.ForEach(f => { try { if(hasExplicitMappings) { var mappingConfig = explicitMappings.SingleOrDefault(m => m.DestinationFieldName.Equals(f.Name, StringComparison.InvariantCultureIgnoreCase)); if (mappingConfig != null) { var sourceField = sourceTable.GetField(mappingConfig.SourceFieldName); FieldMappingDefinitions.Add(new FieldMappingDefinition(sourceField, f, mappingConfig.Type) { BlobCategory = mappingConfig.BlobCategory, ForceValue = mappingConfig.ForceValue }); } else { var sourceField = sourceTable.GetField(f.Name); FieldMappingDefinitions.Add(new FieldMappingDefinition(sourceField, f)); } } else { var sourceField = sourceTable.GetField(f.Name); FieldMappingDefinitions.Add(new FieldMappingDefinition(sourceField, f)); } } catch(MigrationException ex) { if(ex.ErrorCode == MigrationExceptionCodes.DATABASE_ERROR_FIELD_NOT_FOUND) { // TODO: write log //Console.WriteLine(sourceTable.Name + " -> " + destinationTable.Name); } } }); }
private bool CanMap(DestinationTable table) { bool result = true; if (table.IsMapped) { result = false; } else { List<Reference> configIngoreReference = null; if (this._ignoreCircleReferences.ContainsKey(table.Name)) { configIngoreReference = this._ignoreCircleReferences[table.Name]; } var referenceFields = table.Fields.Where(f => f.Type.HasFlag(FieldType.ForeignKey)).ToList(); foreach (Field field in referenceFields) { if (configIngoreReference != null && configIngoreReference.Any(r => r.ReferenceTableName.Equals(field.Reference.ReferenceTableName))) { continue; } DestinationTable referenceTable = _destinationDatabase.GetTable(field.Reference.ReferenceTableName); if (referenceTable.IsMapped == false) { result = false; break; } } } return result; }