Пример #1
0
        /// <summary>
        /// Sync entities
        /// </summary>
        /// <param name="tableModel"></param>
        /// <param name="tenantId"></param>
        /// <param name="schema"></param>
        public async Task SynchronizeEntities(SynchronizeTableViewModel tableModel, Guid?tenantId, string schema = null)
        {
            var table = new TableModel
            {
                Name              = tableModel.Name,
                EntityType        = schema ?? tableModel.Schema,
                Description       = tableModel.Description,
                IsSystem          = tableModel.IsSystem,
                IsPartOfDbContext = tableModel.IsStaticFromEntityFramework,
                TenantId          = tenantId
            };

            _context.Table.Add(table);
            var dbResult = await _context.SaveAsync();

            if (dbResult.IsSuccess)
            {
                if (!table.IsPartOfDbContext)
                {
                    var response = _tablesService.CreateSqlTable(table, _connectionString);
                    if (!response.Result)
                    {
                        return;
                    }
                }
                await SyncEntityFieldsAsync(tableModel, table);
            }
        }
Пример #2
0
        /// <summary>
        /// Sync table from entity framework
        /// </summary>
        /// <param name="tableModel"></param>
        /// <param name="tableId"></param>
        /// <returns></returns>
        public async Task SyncEntityFromEntityFramework(SynchronizeTableViewModel tableModel, Guid tableId)
        {
            var fieldTypeList = await _context.TableFieldTypes.ToListAsync();

            var fieldConfigList = await _context.TableFieldConfigs.ToListAsync();

            foreach (var item in tableModel.Fields)
            {
                if (item.Configurations != null)
                {
                    foreach (var configViewModel in item.Configurations)
                    {
                        configViewModel.Name = fieldConfigList.FirstOrDefault(x => x.Code == configViewModel.ConfigCode)?.Name;
                    }
                }
                // Save field model in the dataBase
                var configValues = new List <TableFieldConfigValue>();
                var fieldType    = fieldTypeList.FirstOrDefault(x => x.Code == item.TableFieldCode);
                if (fieldType == null)
                {
                    continue;
                }
                var model = new TableModelField
                {
                    DataType         = item.DataType,
                    DisplayName      = item.DisplayName,
                    TableId          = tableId,
                    Description      = item.Description,
                    Name             = item.Name,
                    AllowNull        = item.AllowNull,
                    Synchronized     = true,
                    TableFieldTypeId = fieldType.Id,
                };
                if (item.Configurations != null)
                {
                    foreach (var configItem in item.Configurations)
                    {
                        var config = fieldConfigList.FirstOrDefault(x => x.Code == configItem.ConfigCode);
                        if (config == null)
                        {
                            continue;
                        }

                        configValues.Add(new TableFieldConfigValue
                        {
                            TableFieldConfigId = config.Id,
                            TableModelFieldId  = model.Id,
                            Value = configItem.Value,
                        });
                    }
                }
                model.TableFieldConfigValues = configValues;
                _context.TableFields.Add(model);
                await _context.SaveAsync();
            }
        }
Пример #3
0
        /// <inheritdoc />
        /// <summary>
        /// Get table configuration
        /// </summary>
        /// <param name="tableId"></param>
        /// <param name="tableModel"></param>
        /// <returns></returns>
        public async Task <ResultModel <SynchronizeTableViewModel> > GetTableConfiguration(Guid tableId, TableModel tableModel = null)
        {
            var result = new ResultModel <SynchronizeTableViewModel>();
            var table  = tableModel ?? await _context.Table
                         .Include(x => x.TableFields)
                         .ThenInclude(x => x.TableFieldType)
                         .Include(x => x.TableFields)
                         .ThenInclude(x => x.TableFieldConfigValues)
                         .ThenInclude(x => x.TableFieldConfig)
                         .Include(x => x.TableFields)
                         .ThenInclude(x => x.TableFieldType)
                         .AsNoTracking()
                         .FirstOrDefaultAsync(x => x.Id.Equals(tableId));

            if (table == null)
            {
                result.Errors.Add(new ErrorModel("", "Table not found"));
                return(result);
            }

            var fields = await GetTableFieldsForBuildMode(table);

            var model = new SynchronizeTableViewModel
            {
                Name        = table.Name,
                Description = table.Description,
                IsStaticFromEntityFramework = table.IsPartOfDbContext,
                IsSystem = table.IsSystem,
                Schema   = table.EntityType,
                Fields   = fields.ToList()
            };

            result.IsSuccess = true;
            result.Result    = model;
            return(result);
        }
Пример #4
0
        /// <summary>
        /// Complete sync entity
        /// </summary>
        /// <param name="tableModel"></param>
        /// <param name="table"></param>
        private async Task SyncEntityFieldsAsync(SynchronizeTableViewModel tableModel, TableModel table)
        {
            var resultModel = await _context.Table
                              .AsNoTracking()
                              .Include(x => x.TableFields)
                              .FirstOrDefaultAsync(x => x.Id == table.Id);

            if (resultModel == null)
            {
                return;
            }
            {
                if (tableModel.IsStaticFromEntityFramework)
                {
                    await SyncEntityFromEntityFramework(tableModel, resultModel.Id);
                }
                else
                {
                    var fieldTypeList   = _context.TableFieldTypes.ToList();
                    var fieldConfigList = _context.TableFieldConfigs.ToList();

                    foreach (var item in tableModel.Fields)
                    {
                        foreach (var configViewModel in item.Configurations)
                        {
                            configViewModel.Name = fieldConfigList.FirstOrDefault(x => x.Code == configViewModel.ConfigCode)?.Name;

                            if (configViewModel.ConfigCode != "9999")
                            {
                                continue;
                            }
                            if (configViewModel.Value == "systemcore")
                            {
                                configViewModel.Value = table.EntityType;
                            }
                        }

                        var insertField = _tablesService.AddFieldSql(item, tableModel.Name, _connectionString, true, table.EntityType);
                        // Save field model in the dataBase
                        if (!insertField.Result)
                        {
                            continue;
                        }
                        {
                            var configValues   = new List <TableFieldConfigValue>();
                            var tableFieldType = fieldTypeList.FirstOrDefault(x => x.Code == item.TableFieldCode);
                            if (tableFieldType == null)
                            {
                                continue;
                            }
                            var model = new TableModelField
                            {
                                DataType         = item.DataType,
                                TableId          = resultModel.Id,
                                Description      = item.Description,
                                Name             = item.Name,
                                DisplayName      = item.DisplayName,
                                AllowNull        = item.AllowNull,
                                Synchronized     = true,
                                TableFieldTypeId = tableFieldType.Id
                            };

                            foreach (var configItem in item.Configurations)
                            {
                                var config = fieldConfigList.FirstOrDefault(x => x.Code == configItem.ConfigCode);
                                if (config == null)
                                {
                                    continue;
                                }
                                configValues.Add(new TableFieldConfigValue
                                {
                                    TableFieldConfigId = config.Id,
                                    TableModelFieldId  = model.Id,
                                    Value = configItem.Value,
                                });
                            }

                            model.TableFieldConfigValues = configValues;
                            _context.TableFields.Add(model);
                            var dbResult = await _context.SaveAsync();

                            if (!dbResult.IsSuccess)
                            {
                                Debug.WriteLine(dbResult.Errors);
                            }
                        }
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Get entity data
        /// </summary>
        /// <param name="prop"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual SynchronizeTableViewModel GetEntityData(PropertyInfo prop, Type context)
        {
            var result    = new SynchronizeTableViewModel();
            var fields    = new List <CreateTableFieldViewModel>();
            var baseProps = BaseModel.GetPropsName().ToList();
            var entity    = prop.PropertyType.GenericTypeArguments[0];

            //Exclude context not mapped entities
            if (Attribute.IsDefined(prop, typeof(NotMappedAttribute)))
            {
                return(null);
            }

            result.Name = prop.Name;
            result.IsStaticFromEntityFramework = true;
            result.IsSystem = true;
            if (context.GetField("Schema") == null)
            {
                throw new Exception("This context does not have the Schema field, which stores the schema name");
            }
            result.Schema      = context.GetField("Schema").GetValue(context).ToString();
            result.Description = $"System {prop.Name} entity";
            var entityProps = entity.GetProperties().Select(x => x.Name).Except(baseProps).ToList();

            foreach (var field in entityProps)
            {
                var propField = entity.GetProperties().FirstOrDefault(x => x.Name.Equals(field));
                if (propField == null)
                {
                    continue;
                }
                var propType = propField.PropertyType.FullName;
                switch (propType)
                {
                case "System.String":
                    fields.Add(new CreateTableFieldViewModel
                    {
                        Name           = field,
                        DisplayName    = field,
                        TableFieldCode = "10",
                        DataType       = TableFieldDataType.String,
                        Configurations = new List <FieldConfigViewModel>
                        {
                            new FieldConfigViewModel
                            {
                                ConfigCode = "1000",
                                Value      = "500"
                            }
                        }
                    });
                    break;

                case "System.Guid":
                    var f = new CreateTableFieldViewModel
                    {
                        Name           = field,
                        DisplayName    = field,
                        TableFieldCode = "30",
                        DataType       = TableFieldDataType.Guid
                    };

                    if (field.EndsWith("Id"))
                    {
                        var ent = field.Remove(field.Length - "Id".Length);
                        if (entityProps.Contains(ent))
                        {
                            f.Parameter      = "EntityReference";
                            f.Configurations = new List <FieldConfigViewModel>
                            {
                                new FieldConfigViewModel
                                {
                                    ConfigCode = TableFieldConfigCode.Reference.ForeingSchemaTable,
                                    Value      = result.Schema
                                },
                                new FieldConfigViewModel
                                {
                                    ConfigCode = TableFieldConfigCode.Reference.ForeingTable,
                                    Value      = ent
                                }
                            };
                        }
                    }

                    fields.Add(f);
                    break;

                case "System.Int":
                case "System.Int32":
                    fields.Add(new CreateTableFieldViewModel
                    {
                        Name           = field,
                        DisplayName    = field,
                        TableFieldCode = "01",
                        DataType       = TableFieldDataType.Int,
                        Configurations = new List <FieldConfigViewModel>
                        {
                            new FieldConfigViewModel
                            {
                                ConfigCode = "0100",
                                Value      = null
                            },
                            new FieldConfigViewModel
                            {
                                ConfigCode = "0101",
                                Value      = null
                            }
                        }
                    });
                    break;

                case "System.Double":
                    fields.Add(new CreateTableFieldViewModel
                    {
                        Name           = field,
                        DisplayName    = field,
                        TableFieldCode = "01",
                        DataType       = TableFieldDataType.Int,
                        Configurations = new List <FieldConfigViewModel>
                        {
                            new FieldConfigViewModel
                            {
                                ConfigCode = "0100",
                                Value      = null
                            },
                            new FieldConfigViewModel
                            {
                                ConfigCode = "0101",
                                Value      = null
                            }
                        }
                    });
                    break;

                case "System.Boolean":
                    fields.Add(new CreateTableFieldViewModel
                    {
                        Name           = field,
                        DisplayName    = field,
                        TableFieldCode = "40",
                        DataType       = TableFieldDataType.Boolean,
                        Configurations = new List <FieldConfigViewModel>
                        {
                            new FieldConfigViewModel
                            {
                                ConfigCode = "4000",
                                Value      = null
                            }
                        }
                    });
                    break;
                }
            }
            result.Fields = fields;
            return(result);
        }