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