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); }
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()); }