示例#1
0
 public EntityToUpdateDefinition(SyncSide syncSide, string technicalEntityName, string primaryKeyColumnName, PrimaryKeyGenerationType primaryKeyGenerationType, object customCommand)
     : this(syncSide, technicalEntityName, new List <string> {
     primaryKeyColumnName
 }, primaryKeyGenerationType, customCommand)
 {
 }
示例#2
0
        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);
                    }
                }
            });
        }
示例#3
0
 public EntityToUpdateDefinition(SyncSide syncSide, string technicalEntityName, List <string> primaryKeyColumnNames, PrimaryKeyGenerationType primaryKeyGenerationType)
     : this(syncSide, technicalEntityName, primaryKeyColumnNames, primaryKeyGenerationType, null)
 {
 }