예제 #1
0
        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));
        }