public async Task <JsonResult> DeleteField([Required] string id) { var field = Context.TableFields.FirstOrDefault(x => x.Id == Guid.Parse(id)); if (field == null) { return(Json(false)); } var table = Context.Table.FirstOrDefault(x => x.Id == field.TableId); if (table == null) { return(Json(false)); } var checkColumn = _tablesService.CheckColumnValues(ConnectionString, table.Name, table.EntityType, field.Name); if (checkColumn.Result) { return(Json(false)); } var fieldType = Context.TableFieldTypes.FirstOrDefault(x => x.Name == FieldType.EntityReference); if (fieldType == null) { return(Json(false)); } var tenants = _organizationService.GetAllTenants() .Where(x => x.MachineName != GearSettings.DEFAULT_ENTITY_SCHEMA).ToList(); if (field.TableFieldTypeId == fieldType.Id) { var configType = Context.TableFieldConfigs.FirstOrDefault(x => x.TableFieldTypeId == fieldType.Id); if (configType == null) { var configValue = Context.TableFieldConfigValues.First(x => x.TableFieldConfigId == configType.Id && x.TableModelFieldId == field.Id).Value; if (configValue != null) { _tablesService.DropConstraint(ConnectionString, table.Name, table.EntityType, configValue, field.Name); if (!table.IsCommon) { foreach (var tenant in tenants) { _tablesService.DropConstraint(ConnectionString, table.Name, tenant.MachineName, configValue, field.Name); } } } } } var dropColumn = _tablesService.DropColumn(ConnectionString, table.Name, table.EntityType, field.Name); if (!dropColumn.Result) { return(Json(false)); } foreach (var tenant in tenants) { _tablesService.DropColumn(ConnectionString, table.Name, tenant.MachineName, field.Name); } Context.TableFields.Remove(field); var updateResult = await Context.SaveAsync(); if (!updateResult.IsSuccess) { return(Json(false)); } //Call to refresh runtime dynamic types RefreshRuntimeTypes(); return(Json(true)); }