internal void tableMappingSwitchDatabase(TableMapping[] tableMappings, Database db) { Dictionary<int, TableMapping> newTableMappings = new Dictionary<int, TableMapping>(); foreach (TableMapping tableMapping in tableMappings) { DBTable table = db.Tables.Where(t => t.Reference == tableMapping.DestinationTable.Reference).FirstOrDefault(); if (table != null) { TableMapping newTableMapping = new TableMapping(table, tableMapping.ImportType, new ColumnMapping[0]); newTableMappings.Add(tableMapping.Index, newTableMapping); } } foreach (int index in newTableMappings.Keys) { TableMapping newTableMapping = newTableMappings[index]; List<ColumnMapping> newColumnMappings = new List<ColumnMapping>(); TableMapping oldTableMapping = tableMappings .Where(t => t.Index == index).First(); ColumnMapping[] oldColumnMappings = oldTableMapping.ColumnMappings; foreach (ColumnMapping oldColumnMapping in oldColumnMappings) { DBColumn column = newTableMapping.DestinationTable.Columns .Where(c => c.Name == oldColumnMapping.DestinationColumn.Name) .FirstOrDefault(); if (column != null) { string type = oldColumnMapping.GetType().ToString(); ColumnMapping newColumnMapping = null; if (type == typeof(ExcelColumnMapping).ToString()) { var excelColumnMapping = (ExcelColumnMapping)oldColumnMapping; newColumnMapping = new ExcelColumnMapping(excelColumnMapping.SourceHeader, column, oldColumnMapping.ColumnUse); } else if (type == typeof(TableColumnMapping).ToString()) { var tableColumnMapping = (TableColumnMapping)oldColumnMapping; if (newTableMappings.ContainsKey(tableColumnMapping.SourceTableMapping.Index)) { TableMapping newSourceTableMapping = newTableMappings[tableColumnMapping.SourceTableMapping.Index]; DBColumn newSourceColumn = newSourceTableMapping.DestinationTable.Columns .Where(c => c.Name == tableColumnMapping.SourceColumn.Name) .FirstOrDefault(); if (newSourceColumn != null) { newColumnMapping = new TableColumnMapping(newSourceTableMapping, newSourceColumn, column, oldColumnMapping.ColumnUse); } } } else if (type == typeof(LiteralColumnMapping).ToString()) { var literalColumnMapping = (LiteralColumnMapping)oldColumnMapping; newColumnMapping = new LiteralColumnMapping(literalColumnMapping.Literal, literalColumnMapping.LiteralType, column, literalColumnMapping.ColumnUse); } if (newColumnMapping == null) { newColumnMapping = new NullColumnMapping(column, oldColumnMapping.ColumnUse); } newColumnMappings.Add(newColumnMapping); } } newTableMapping.ColumnMappings = newColumnMappings.ToArray(); } this.TableMappings = newTableMappings.Values.ToList(); }