public override void OnRecordDelete(Table recordToDelete, DbSet <Table> entities, TContext context)
        {
            string permissibleName = GetPermissibleName(recordToDelete.Name);

            if (EntityFileExists(permissibleName, "Table"))
            {
                CodGenContext.DeleteEntityFromContext(permissibleName);
                DeleteEntityFile(permissibleName, "Table");
                Table table = context.Tables
                              .AsNoTracking()
                              .Select(t => new
                {
                    id           = t.Id,
                    name         = t.Name,
                    tableColumns = t.TableColumns.Select(tableColumn => new
                    {
                        id             = tableColumn.Id,
                        table          = tableColumn.Table,
                        foreignTableId = tableColumn.ForeignTableId,
                    })
                })
                              .Select(t => new Table
                {
                    Id           = t.id,
                    Name         = t.name,
                    TableColumns = t.tableColumns.Select(tableColumn => new TableColumn
                    {
                        Id             = tableColumn.id,
                        Table          = tableColumn.table,
                        ForeignTableId = tableColumn.foreignTableId
                    }).ToList()
                })
                              .FirstOrDefault(i => i.Id == recordToDelete.Id);

                // Удаление навигационных свойств во всех классах, где данная таблица является дочерней
                table.TableColumns.Where(f => f.IsForeignKey).ToList().ForEach(foreignKey =>
                {
                    Table foreignTable = context.Tables.AsNoTracking().FirstOrDefault(i => i.Id == foreignKey.ForeignTableId);
                    if (foreignTable != null)
                    {
                        CodGenModels.DeleteForeignProperty(foreignTable, foreignKey.Table);
                    }
                });
            }
            base.OnRecordDelete(recordToDelete, entities, context);
        }
        public ActionResult Publish()
        {
            dynamic     currentRecord;
            TBUSFactory busFactory = new TBUSFactory();

            switch (typeof(TTable).Name)
            {
            case "Table":
                currentRecord = busFactory.GetRecord(null, context, viewInfo, context.BusinessComponents.FirstOrDefault(n => n.Name == "Table"));
                CodGenModels.GenerateModel(context, typeof(Table), currentRecord.Id);
                CodGenContext.AddEntityToContext(currentRecord.Name);
                break;

            case "BusinessComponent":
                currentRecord = busFactory.GetRecord(null, context, viewInfo, context.BusinessComponents.FirstOrDefault(n => n.Name == "Business Component"));
                CodGenModels.GenerateModel(context, typeof(BusinessComponent), currentRecord.Id);
                CodGenFactories.GenerateFactory(context, DataFR, currentRecord.Id);
                CodGenController.GenerateComponentCotroller(context, currentRecord.Id);
                break;

            case "Applet":
                currentRecord = busFactory.GetRecord(null, context, viewInfo, context.BusinessComponents.FirstOrDefault(n => n.Name == "Applet"));
                CodGenModels.GenerateModel(context, typeof(Applet), currentRecord.Id);
                CodGenFactories.GenerateFactory(context, UIFR, currentRecord.Id);
                CodGenController.GenerateAppletCotroller(context, currentRecord.Id);
                break;

            case "View":
                currentRecord = busFactory.GetRecord(null, context, viewInfo, context.BusinessComponents.FirstOrDefault(n => n.Name == "View"));
                CodGenFactories.GenerateLinksForApplets(context, currentRecord.Id);
                break;

            case "Screen":
                currentRecord = busFactory.GetRecord(null, context, viewInfo, context.BusinessComponents.FirstOrDefault(n => n.Name == "Screen"));
                CodGenController.GenerateScreenController(context, currentRecord.Id);
                break;

            default:
                break;
            }
            return(Ok());
        }