Пример #1
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);
 }
Пример #2
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);
        }
        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);
        }