Exemplo n.º 1
0
        public override void OnRecordDelete(TableColumn recordToDelete, DbSet <TableColumn> entities, TContext context)
        {
            // Удадение внешнего ключа
            if (recordToDelete.IsForeignKey)
            {
                Table foreignTable = context.Tables.FirstOrDefault(i => i.Id == recordToDelete.ForeignTableId);
                if (foreignTable != null)
                {
                    Table currentTable = context.Tables.FirstOrDefault(i => i.Id == recordToDelete.TableId);
                    CodGenModels.DeleteForeignProperty(foreignTable, currentTable);
                }
            }

            // Обновление контекста
            base.OnRecordDelete(recordToDelete, entities, context);
        }
Exemplo n.º 2
0
 public override void OnRecordUpdate(TableColumn oldRecord, TableColumn changedRecord, DbSet <TableColumn> entityDBSet, TContext context)
 {
     // При снятии внешнего ключа с колонки или при изменении внешней таблицы, необходимо в классе той таблицы, что была во внешнем ключе до этого, удалить навигационное свойство
     changedRecord.NeedUpdate = true;
     if ((!changedRecord.IsForeignKey && oldRecord.IsForeignKey) ||
         (changedRecord.IsForeignKey && oldRecord.IsForeignKey && changedRecord.ForeignTableId != oldRecord.ForeignTableId))
     {
         Table foreignTable = context.Tables.FirstOrDefault(i => i.Id == oldRecord.ForeignTableId);
         if (foreignTable != null)
         {
             Table currentTable = context.Tables.FirstOrDefault(i => i.Id == changedRecord.TableId);
             CodGenModels.DeleteForeignProperty(foreignTable, currentTable);
         }
     }
     base.OnRecordUpdate(oldRecord, changedRecord, entityDBSet, context);
 }
        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());
        }