diff --git a/src/MappingExtensions.cs b/src/MappingExtensions.cs index 259a509..fcc31da 100644 --- a/src/MappingExtensions.cs +++ b/src/MappingExtensions.cs @@ -147,7 +147,7 @@ public static string GetConditionalSql(string conditionalsSql, string columnName { if (mappingConditional.SourceColumn.Type == typeof(string)) { - conditionalValue = string.Join(",", conditionalValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(val => $"'{val}'")); + conditionalValue = string.Join(",", conditionalValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(val => $"'{val.Trim()}'")); } conditionalsSql = string.Format( "{0}[{1}] IN ({2}) and ", @@ -164,7 +164,7 @@ public static string GetConditionalSql(string conditionalsSql, string columnName { if (mappingConditional.SourceColumn.Type == typeof(string)) { - notInConditionalValue = string.Join(",", notInConditionalValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(val => $"'{val}'")); + notInConditionalValue = string.Join(",", notInConditionalValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(val => $"'{val.Trim()}'")); } conditionalsSql = string.Format( "{0}[{1}] NOT IN ({2}) and ", diff --git a/src/SQLDestinationWriter.cs b/src/SQLDestinationWriter.cs index 2d48578..d794138 100644 --- a/src/SQLDestinationWriter.cs +++ b/src/SQLDestinationWriter.cs @@ -160,7 +160,7 @@ protected virtual void Initialize() { List destColumns = new List(); var columnMappings = Mapping.GetColumnMappings(); - foreach (ColumnMapping columnMapping in columnMappings) + foreach (ColumnMapping columnMapping in columnMappings.DistinctBy(obj => obj.DestinationColumn.Name)) { destColumns.Add((SqlColumn)columnMapping.DestinationColumn); } @@ -200,23 +200,15 @@ public virtual void Write(Dictionary row) { if (columnMapping.HasScriptWithValue || row.ContainsKey(columnMapping.SourceColumn.Name)) { - switch (columnMapping.ScriptType) + object dataToRow = columnMapping.ConvertInputValueToOutputValue(row[columnMapping.SourceColumn.Name]); + + if (columnMappings.Any(obj => obj.DestinationColumn.Name == columnMapping.DestinationColumn.Name && obj.GetId() != columnMapping.GetId())) + { + dataRow[columnMapping.DestinationColumn.Name] += dataToRow.ToString(); + } + else { - case ScriptType.None: - dataRow[columnMapping.DestinationColumn.Name] = columnMapping.ConvertInputToOutputFormat(row[columnMapping.SourceColumn.Name]); - break; - case ScriptType.Append: - dataRow[columnMapping.DestinationColumn.Name] = columnMapping.ConvertInputToOutputFormat(row[columnMapping.SourceColumn.Name]) + columnMapping.ScriptValue; - break; - case ScriptType.Prepend: - dataRow[columnMapping.DestinationColumn.Name] = columnMapping.ScriptValue + columnMapping.ConvertInputToOutputFormat(row[columnMapping.SourceColumn.Name]); - break; - case ScriptType.Constant: - dataRow[columnMapping.DestinationColumn.Name] = columnMapping.GetScriptValue(); - break; - case ScriptType.NewGuid: - dataRow[columnMapping.DestinationColumn.Name] = columnMapping.GetScriptValue(); - break; + dataRow[columnMapping.DestinationColumn.Name] = dataToRow; } } else @@ -425,7 +417,7 @@ public virtual void MoveDataToMainTable(SqlTransaction sqlTransaction, bool upda { string sqlConditions = ""; string firstKey = ""; - var columnMappings = Mapping.GetColumnMappings().Where(cm => cm.Active); + var columnMappings = Mapping.GetColumnMappings().Where(cm => cm.Active).DistinctBy(obj => obj.DestinationColumn.Name); bool isPrimaryKeyColumnExists = columnMappings.IsKeyColumnExists(); foreach (ColumnMapping columnMapping in columnMappings)