public string UpdateTableAndfieldconfiguration(TableAndFieldConfigurationServiceModel tableAndFieldConfiguration)
        {
            try
            {
                if (tableAndFieldConfiguration == null)
                {
                    //return Exception;
                }
                var dataToInsert            = new List <FieldConfiguration>();
                var dataToUpdate            = new List <FieldConfiguration>();
                var idsToDeleteFieldMapping = new List <FieldMappingConfiguration>();

                using (var repo = new RepositoryPattern <TableConfiguration>())
                {
                    var detailsToUpdate = Mapper.Map <TableConfiguration>(tableAndFieldConfiguration.tableConfiguration);
                    repo.Update(detailsToUpdate);
                    repo.Save();
                }
                tableAndFieldConfiguration.fieldConfiguration.ForEach(f =>
                                                                      { f.TableConfigId = tableAndFieldConfiguration.tableConfiguration.Id; f.IsDisplay = true; });

                dataToInsert = Mapper.Map <List <FieldConfiguration> >(tableAndFieldConfiguration.fieldConfiguration.Where(f => f.Id == default(int)).ToList());
                dataToUpdate = Mapper.Map <List <FieldConfiguration> >(tableAndFieldConfiguration.fieldConfiguration.Where(u => u.Id != default(int)).ToList());

                var configurationIds = dataToUpdate.Select(i => i.Id).ToList();

                using (var repo = new RepositoryPattern <FieldConfiguration>())
                {
                    //Update existing records which will not display in future
                    var records = repo.SelectAll().Where(f => f.TableConfigId == tableAndFieldConfiguration.tableConfiguration.Id &&
                                                         !configurationIds.Any(c => c == f.Id)).Select(c => { c.IsDisplay = false; return(c); }).ToList();

                    if (records.Any())
                    {
                        dataToUpdate.AddRange(records);
                    }

                    if (dataToUpdate.Any())
                    {
                        repo.BulkUpdate(dataToUpdate);
                    }
                    if (dataToInsert.Any())
                    {
                        repo.BulkInsert(dataToInsert);
                    }

                    idsToDeleteFieldMapping.AddRange(repo.SelectAll().Where(h => h.TableConfigId == tableAndFieldConfiguration.tableConfiguration.Id && h.FieldMappingConfigurations.Any())
                                                     .SelectMany(g => g.FieldMappingConfigurations).ToList());
                }
                tableAndFieldConfiguration.fieldConfiguration.ForEach(field =>
                {
                    if (field.Id == default(int))
                    {
                        var dataWithIds = dataToInsert.FirstOrDefault(a => a.SourceColumnName == field.SourceColumnName &&
                                                                      a.TableConfigId == field.TableConfigId && a.ReferenceTableName == field.ReferenceTableName &&
                                                                      a.ReferenceColumnName == field.ReferenceColumnName && field.IsDisplay).Id;
                        field.Id = dataWithIds;
                    }
                });

                List <FieldMappingConfiguration> fieldMappingConfigurations = new List <FieldMappingConfiguration>();
                tableAndFieldConfiguration.fieldConfiguration.ForEach(fields =>
                {
                    if (fields.MappedCoumns.Any())
                    {
                        fields.MappedCoumns.ForEach(m =>
                        {
                            var mappingDetails = new FieldMappingConfiguration()
                            {
                                FieldConfigurationId = fields.Id,
                                MapColumnName        = m,
                                MapTableName         = fields.ReferenceTableName,
                            };
                            fieldMappingConfigurations.Add(mappingDetails);
                        });
                    }
                });

                using (var repo = new RepositoryPattern <FieldMappingConfiguration>())
                {
                    if (idsToDeleteFieldMapping.Any())
                    {
                        repo.BulkDelete(idsToDeleteFieldMapping);
                    }
                    if (fieldMappingConfigurations.Any())
                    {
                        repo.BulkInsert(fieldMappingConfigurations);
                    }
                }

                return("Table and field mapping Save succesfully");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public TableAndFieldConfigurationServiceModel GetDetailstableAndFieldsById(int id)
        {
            try
            {
                if (id == default(int))
                {
                    // return excepions
                }
                var tableAndFieldConfigurationDetails = new TableAndFieldConfigurationServiceModel();
                var tableConfigDetails = new TableConfiguration();
                using (var repo = new RepositoryPattern <TableConfiguration>())
                {
                    tableConfigDetails = repo.SelectByID(id);
                }
                tableAndFieldConfigurationDetails.tableConfiguration = Mapper.Map <TableConfiguratonServiceModel>(tableConfigDetails);

                //Getting Table Fields and Mapping Configuration Details
                var fieldsConfigurationDetails = new List <FieldConfiguration>();
                using (var repo = new RepositoryPattern <FieldConfiguration>())
                {
                    fieldsConfigurationDetails = repo.SelectAll().Where(f => f.TableConfigId == tableConfigDetails.Id).ToList();
                }
                tableAndFieldConfigurationDetails.fieldConfiguration = fieldsConfigurationDetails.Select(field =>
                {
                    var refTableColumn = new List <string>();
                    if (!string.IsNullOrWhiteSpace(field.ReferenceTableName) && !string.IsNullOrEmpty(field.ReferenceTableName))
                    {
                        refTableColumn = GetPrimaryKeyTableColumns(new IdNameServiceModel()
                        {
                            Id = tableConfigDetails.ConnectionId ?? 0, Name = field.ReferenceTableName
                        });
                    }
                    return(new FieldConfigurationServiceModel
                    {
                        Id = field.Id,
                        IsDisplay = (field.IsDisplay.HasValue) ? field.IsDisplay.Value : false,
                        SourceColumnName = field.SourceColumnName,
                        TableConfigId = field.TableConfigId,
                        ReferenceColumnName = (field.IsDisplay.HasValue && field.IsDisplay.Value) ? field.ReferenceColumnName : string.Empty,
                        ReferenceTableName = (field.IsDisplay.HasValue && field.IsDisplay.Value) ? field.ReferenceTableName : string.Empty,
                        ReferenceTableColumns = (field.IsDisplay.HasValue && field.IsDisplay.Value) ? refTableColumn : new List <string>(),
                        MappedCoumns = (field.IsDisplay.HasValue && field.IsDisplay.Value) ? field.FieldMappingConfigurations.
                                       Where(b => b.FieldConfigurationId == field.Id).Select(n => n.MapColumnName).ToList() : new List <string>()
                    });
                }).ToList();

                var tableDetails   = GetTablesFieldsDetails(tableConfigDetails.ConnectionId ?? 0, tableConfigDetails.MasterTableName);
                var deletedColumns = tableAndFieldConfigurationDetails.fieldConfiguration
                                     .Where(d => !tableDetails.Any(c => c.ColumnName.ToLower() == d.SourceColumnName.ToLower())).ToList();
                if (deletedColumns.Any())
                {
                    DeleteColumnsIfNeeded(deletedColumns);
                }

                if (tableDetails.Any())
                {
                    UpdateConstraintTypeAndInsertColumn(tableDetails, tableAndFieldConfigurationDetails.fieldConfiguration, tableAndFieldConfigurationDetails.tableConfiguration.ConnectionId ?? 0);
                }

                return(tableAndFieldConfigurationDetails);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
 public HttpResponseMessage UpdateTableAndFieldMappingConfiguration(TableAndFieldConfigurationServiceModel tableAndFieldConfiguration)
 {
     return(Request.CreateResponse(HttpStatusCode.OK, _tableConfigurationService.UpdateTableAndfieldconfiguration(tableAndFieldConfiguration)));
 }
        public string SaveTableConfiguraionDetails(TableAndFieldConfigurationServiceModel tableAndFieldConfiguration)
        {
            try
            {
                if (tableAndFieldConfiguration == null)
                {
                    //return exce
                }
                if (!tableAndFieldConfiguration.fieldConfiguration.Any())
                {
                    //return
                }
                var tableConfigData = Mapper.Map <TableConfiguration>(tableAndFieldConfiguration.tableConfiguration);
                using (var tableConfigRepo = new RepositoryPattern <TableConfiguration>())
                {
                    tableConfigRepo.Insert(tableConfigData);
                    tableConfigRepo.Save();
                }

                //for entry in table
                tableAndFieldConfiguration.fieldConfiguration.ForEach(v => { v.TableConfigId = tableConfigData.Id; v.IsDisplay = true; });
                List <FieldConfiguration> fieldDetails = Mapper.Map <List <FieldConfiguration> >(tableAndFieldConfiguration.fieldConfiguration);
                using (var fieldConfigRepo = new RepositoryPattern <FieldConfiguration>())
                {
                    fieldConfigRepo.BulkInsert(fieldDetails);
                }
                List <FieldMappingConfiguration> fieldMappingConfigurations = new List <FieldMappingConfiguration>();
                tableAndFieldConfiguration.fieldConfiguration.ForEach(field =>
                {
                    var dataWithId = fieldDetails.FirstOrDefault(a => a.SourceColumnName == field.SourceColumnName &&
                                                                 a.TableConfigId == field.TableConfigId && a.ReferenceTableName == field.ReferenceTableName &&
                                                                 a.ReferenceColumnName == field.ReferenceColumnName).Id;
                    field.Id = dataWithId;
                });
                tableAndFieldConfiguration.fieldConfiguration.ForEach(field =>
                {
                    if (!string.IsNullOrWhiteSpace(field.ReferenceTableName) && !string.IsNullOrWhiteSpace(field.ReferenceColumnName))
                    {
                        if (field.MappedCoumns.Any())
                        {
                            field.MappedCoumns.ForEach(m =>
                            {
                                var mappingDetails = new FieldMappingConfiguration()
                                {
                                    FieldConfigurationId = field.Id,
                                    MapColumnName        = m,
                                    MapTableName         = field.ReferenceTableName,
                                };
                                fieldMappingConfigurations.Add(mappingDetails);
                            });
                        }
                    }
                });

                if (fieldMappingConfigurations.Any())
                {
                    using (var fieldMappingConfigRepo = new RepositoryPattern <FieldMappingConfiguration>())
                    {
                        fieldMappingConfigRepo.BulkInsert(fieldMappingConfigurations);
                    }
                }
                return("Table Configuration Saved Succefully");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
 public HttpResponseMessage SaveFieldConfiguration(TableAndFieldConfigurationServiceModel tableAndFieldConfiguration)
 {
     return(Request.CreateResponse(HttpStatusCode.OK, _tableConfigurationService.SaveTableConfiguraionDetails(tableAndFieldConfiguration)));
 }