public EntityToUpdateDefinition(SyncSide syncSide, string technicalEntityName, string primaryKeyColumnName, PrimaryKeyGenerationType primaryKeyGenerationType, object customCommand) : this(syncSide, technicalEntityName, new List <string> { primaryKeyColumnName }, primaryKeyGenerationType, customCommand) { }
public EntityToUpdateDefinition(SyncSide syncSide, string technicalEntityName, List <string> primaryKeyColumnNames, PrimaryKeyGenerationType primaryKeyGenerationType, object customCommand) { SyncSide = syncSide; if (!(primaryKeyGenerationType == Data.PrimaryKeyGenerationType.AutoGenerate || primaryKeyGenerationType == Data.PrimaryKeyGenerationType.Manual || primaryKeyGenerationType == Data.PrimaryKeyGenerationType.Custom)) { throw new EnumValueNotImplementedException <PrimaryKeyGenerationType>(primaryKeyGenerationType); } if (primaryKeyColumnNames == null || primaryKeyColumnNames.Count == 0) { throw new Exception("One or more primary key columns names are required."); } foreach (var primaryKeyColumnName in primaryKeyColumnNames) { if (String.IsNullOrWhiteSpace(primaryKeyColumnName)) { throw new Exception("Primary key column name is missing or empty."); } } TechnicalEntityName = technicalEntityName.Trim(); primaryKeyColumnNames.ForEach(d => d.Trim()); PrimaryKeyColumnNames = primaryKeyColumnNames; PrimaryKeyGenerationType = primaryKeyGenerationType; CustomCommand = customCommand; if (PrimaryKeyGenerationType == PrimaryKeyGenerationType.Manual) { foreach (var primaryKeyColumnName in PrimaryKeyColumnNames) { DataOnlyFields.Add(new DataOnlyField(primaryKeyColumnName)); } } switch (syncSide) { case SyncSide.Source: foreach (var primaryKeyColumnName in PrimaryKeyColumnNames) { PrimaryKeyColumnNamesWithPrefix.Add(DataTableHelper.SOURCE_PREFIX + primaryKeyColumnName); } break; case SyncSide.Target: foreach (var primaryKeyColumnName in PrimaryKeyColumnNames) { PrimaryKeyColumnNamesWithPrefix.Add(DataTableHelper.TARGET_PREFIX + primaryKeyColumnName); } break; default: throw new EnumValueNotImplementedException <SyncSide>(syncSide); } // validate added secondary key and add as data only field SecondaryKeyColumnNames.ListChanged += new ListChangedEventHandler((sender, args) => { if (args.ListChangedType == ListChangedType.ItemAdded) { if (String.IsNullOrWhiteSpace(SecondaryKeyColumnNames[args.NewIndex])) { throw new Exception("Secondary key column name is missing or empty."); } DataOnlyFields.Add(new DataOnlyField(SecondaryKeyColumnNames[args.NewIndex], false)); } }); // validate added data only field DataOnlyFields.ListChanged += new ListChangedEventHandler((sender, args) => { if (args.ListChangedType == ListChangedType.ItemAdded) { if (String.IsNullOrWhiteSpace(DataOnlyFields[args.NewIndex].FieldName)) { throw new Exception("Data only field name is missing or empty."); } // remove if a duplicate value if (DataOnlyFields.Where(d => d.FieldName.Equals(DataOnlyFields[args.NewIndex].FieldName, StringComparison.OrdinalIgnoreCase)).Count() > 1) { var newItem = DataOnlyFields[args.NewIndex]; var existingItem = DataOnlyFields.Where(d => d.FieldName.Equals(DataOnlyFields[args.NewIndex].FieldName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); // override the mapped field if a Func is specified to populate the value if (existingItem.MethodToPopulateValue != null && newItem.MethodToPopulateValue == null) { newItem.MethodToPopulateValue = existingItem.MethodToPopulateValue; } if (existingItem.IsRequiredByJobBatch) { newItem.IsRequiredByJobBatch = true; } // remove the old instance now that the new one is updated DataOnlyFields.Remove(existingItem); } } }); // validate added data only field TransposeDataOnlyFields.ListChanged += new ListChangedEventHandler((sender, args) => { if (args.ListChangedType == ListChangedType.ItemAdded) { if (String.IsNullOrWhiteSpace(TransposeDataOnlyFields[args.NewIndex].FieldName)) { throw new Exception("Transpose data only field name is missing or empty."); } // remove if a duplicate value if (TransposeDataOnlyFields.Where(d => d.FieldName.Equals(TransposeDataOnlyFields[args.NewIndex].FieldName, StringComparison.OrdinalIgnoreCase)).Count() > 1) { var newItem = DataOnlyFields[args.NewIndex]; var existingItem = TransposeDataOnlyFields.Where(d => d.FieldName.Equals(TransposeDataOnlyFields[args.NewIndex].FieldName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); // remove the old instance now that the new one is updated TransposeDataOnlyFields.Remove(existingItem); } } }); }
public EntityToUpdateDefinition(SyncSide syncSide, string technicalEntityName, List <string> primaryKeyColumnNames, PrimaryKeyGenerationType primaryKeyGenerationType) : this(syncSide, technicalEntityName, primaryKeyColumnNames, primaryKeyGenerationType, null) { }