public override UITableColumn BusinessToUI(BUSTableColumn businessEntity)
        {
            UITableColumn UIEntity = base.BusinessToUI(businessEntity);

            UIEntity.ForeignTableName    = businessEntity.ForeignTableName;
            UIEntity.ForeignTableKeyName = businessEntity.ForeignTableKeyName;
            UIEntity.IsForeignKey        = businessEntity.IsForeignKey;
            UIEntity.ExtencionType       = businessEntity.ExtencionType;
            UIEntity.Type       = businessEntity.Type;
            UIEntity.IsNullable = businessEntity.IsNullable;
            UIEntity.Length     = businessEntity.Length.ToString();
            UIEntity.OnDelete   = businessEntity.OnDelete;
            UIEntity.OnUpdate   = businessEntity.OnUpdate;
            return(UIEntity);
        }
        public override IEnumerable <ValidationResult> BUSUIValidate(TContext context, BUSTableColumn businessComponent, UITableColumn UIEntity)
        {
            List <ValidationResult> result = base.BUSUIValidate(context, businessComponent, UIEntity).ToList();

            if (string.IsNullOrWhiteSpace(businessComponent.ErrorMessage))
            {
                if (businessComponent.IsForeignKey)
                {
                    if (businessComponent.ForeignTable == null)
                    {
                        result.Add(new ValidationResult(
                                       "Table with this name not found.",
                                       new List <string>()
                        {
                            "ForeignTable"
                        }));
                    }

                    if (businessComponent.ForeignTableKey == null)
                    {
                        result.Add(new ValidationResult(
                                       "Table column with this name not found.",
                                       new List <string>()
                        {
                            "ForeignTable"
                        }));
                    }
                }
            }
            return(result);
        }
        public override BUSTableColumn UIToBusiness(UITableColumn UIEntity, TContext context, IViewInfo viewInfo, bool isNewRecord)
        {
            BUSTableColumn businessEntity = base.UIToBusiness(UIEntity, context, viewInfo, isNewRecord);
            Table          table          = context.Tables
                                            .AsNoTracking()
                                            .Select(t => new
            {
                id           = t.Id,
                name         = t.Name,
                tableColumns = t.TableColumns.Select(tableColumn => new
                {
                    id   = tableColumn.Id,
                    name = tableColumn.Name,
                })
            })
                                            .Select(t => new Table
            {
                Id           = t.id,
                Name         = t.name,
                TableColumns = t.tableColumns.Select(tableColumn => new TableColumn
                {
                    Id   = tableColumn.id,
                    Name = tableColumn.name
                }).ToList()
            })
                                            .FirstOrDefault(n => n.Id.ToString() == ComponentsRecordsInfo.GetSelectedRecord("Table"));

            if (table == null)
            {
                businessEntity.ErrorMessage = "First you need create table.";
            }
            else
            {
                // Если запись новая и она не уникальна, записывается ошибка
                TableColumn tableColumn = table.TableColumns?.FirstOrDefault(n => n.Name == UIEntity.Name);
                if (table.TableColumns != null && tableColumn != null && tableColumn.Id != UIEntity.Id)
                {
                    businessEntity.ErrorMessage = $"Table column with this name is already exists in table {table.Name}.";
                }
                else
                {
                    // Table
                    businessEntity.Table   = table;
                    businessEntity.TableId = table.Id;

                    // Foreign Key
                    if (UIEntity.IsForeignKey)
                    {
                        // Внешняя таблица
                        Table foreignTable = context.Tables
                                             .AsNoTracking()
                                             .Select(t => new
                        {
                            id           = t.Id,
                            name         = t.Name,
                            tableColumns = t.TableColumns.Select(tableColumn => new
                            {
                                id   = tableColumn.Id,
                                name = tableColumn.Name,
                            })
                        })
                                             .Select(t => new Table
                        {
                            Id           = t.id,
                            Name         = t.name,
                            TableColumns = t.tableColumns.Select(tableColumn => new TableColumn
                            {
                                Id   = tableColumn.id,
                                Name = tableColumn.name
                            }).ToList()
                        })
                                             .FirstOrDefault(n => n.Name == UIEntity.ForeignTableName);

                        if (foreignTable != null)
                        {
                            businessEntity.ForeignTable     = foreignTable;
                            businessEntity.ForeignTableId   = foreignTable.Id;
                            businessEntity.ForeignTableName = foreignTable.Name;

                            // Внешний ключ для таблицы
                            TableColumn foreignTableColumn = foreignTable.TableColumns.FirstOrDefault(n => n.Name == UIEntity.ForeignTableKeyName);
                            if (foreignTableColumn != null)
                            {
                                businessEntity.ForeignTableKey     = foreignTableColumn;
                                businessEntity.ForeignTableKeyId   = foreignTableColumn.Id;
                                businessEntity.ForeignTableKeyName = foreignTableColumn.Name;
                                businessEntity.ExtencionType       = UIEntity.ExtencionType;
                                businessEntity.OnDelete            = UIEntity.OnDelete;
                                businessEntity.OnUpdate            = UIEntity.OnUpdate;
                            }
                        }
                    }

                    businessEntity.Type         = UIEntity.Type;
                    businessEntity.IsForeignKey = UIEntity.IsForeignKey;
                    businessEntity.IsNullable   = UIEntity.IsNullable;
                    businessEntity.Length       = Convert.ToInt32(UIEntity.Length);
                }
            }
            return(businessEntity);
        }
        public override IEnumerable <ValidationResult> UIValidate(TContext context, IViewInfo viewInfo, UITableColumn UIEntity, bool isNewRecord)
        {
            List <ValidationResult> result = base.UIValidate(context, viewInfo, UIEntity, isNewRecord).ToList();

            if (UIEntity.IsForeignKey)
            {
                if (string.IsNullOrWhiteSpace(UIEntity.ForeignTableName) || string.IsNullOrWhiteSpace(UIEntity.ForeignTableKeyName))
                {
                    result.Add(new ValidationResult(
                                   "You must indicate the name of the external table and the column in it.",
                                   new List <string>()
                    {
                        "ForeignTable"
                    }));
                }

                if (string.IsNullOrWhiteSpace(UIEntity.OnDelete) || string.IsNullOrWhiteSpace(UIEntity.OnUpdate))
                {
                    result.Add(new ValidationResult(
                                   "You must specify actions in case of deleting or updating a record.",
                                   new List <string>()
                    {
                        "ForeignTable"
                    }));
                }

                if (string.IsNullOrWhiteSpace(UIEntity.ExtencionType))
                {
                    result.Add(new ValidationResult(
                                   "You must specify type of extencion.",
                                   new List <string>()
                    {
                        "ForeignTable"
                    }));
                }
            }
            return(result);
        }