Просмотр исходного кода

fix: 修复表字段名与实体字段名不一致时生成代码外键字段爆红的问题

喵你个旺呀 1 год назад
Родитель
Сommit
0d93d11caf

+ 15 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -180,8 +180,15 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var entityType = provider.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
         var entityBasePropertyNames = _codeGenOptions.EntityBaseColumn[nameof(EntityTenant)];
+        var properties = GetEntityInfos().Result.First(e => e.DbTableName == tableName).Type.GetProperties()
+            .Where(e => e.GetCustomAttribute<SugarColumn>()?.IsIgnore == false).Select(e => new
+            {
+                PropertyName = e.Name,
+                ColumnComment = e.GetCustomAttribute<SugarColumn>()?.ColumnDescription,
+                ColumnName = e.GetCustomAttribute<SugarColumn>()?.ColumnName ?? e.Name
+            }).ToList();
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
-        return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
+        var columnList = provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
         {
             ColumnName = config!.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, entityBasePropertyNames) : u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),
@@ -189,6 +196,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
             ColumnComment = u.ColumnDescription
         }).ToList();
+        foreach (var column in columnList)
+        {
+            var property = properties.First(e => e.ColumnName == column.ColumnName);
+            column.ColumnComment ??= property?.ColumnComment;
+            column.PropertyName = property?.PropertyName;
+        }
+        return columnList;
     }
 
     /// <summary>

+ 3 - 3
Web/src/views/system/codeGen/component/joinTableDialog.vue

@@ -26,21 +26,21 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="显示字段" prop="fkDisplayColumnList" :rules="[{ required: true, message: '显示字段不能为空', trigger: 'blur' }]">
 							<el-select v-model="state.ruleForm.fkDisplayColumnList" multiple filterable clearable class="w100">
-								<el-option v-for="item in state.columnData" :key="item.columnName" :label="item.columnName + ' [' + item.columnComment + ']'" :value="item.columnName" />
+								<el-option v-for="item in state.columnData" :key="item.propertyName" :label="item.propertyName + ' [' + item.columnComment + ']'" :value="item.propertyName" />
 							</el-select>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="值&ensp;字&ensp;段" prop="fkLinkColumnName" :rules="[{ required: true, message: '值字段不能为空', trigger: 'blur' }]">
 							<el-select v-model="state.ruleForm.fkLinkColumnName" filterable clearable class="w100">
-								<el-option v-for="item in state.columnData" :key="item.columnName" :label="item.columnName + ' [' + item.columnComment + ']'" :value="item.columnName" />
+								<el-option v-for="item in state.columnData" :key="item.propertyName" :label="item.propertyName + ' [' + item.columnComment + ']'" :value="item.propertyName" />
 							</el-select>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="state.ruleForm.effectType == 'ApiTreeSelector'">
 						<el-form-item label="父级字段" prop="pidColumn" :rules="[{ required: true, message: '父级字段不能为空', trigger: 'blur' }]">
 							<el-select v-model="state.ruleForm.pidColumn" filterable clearable class="w100">
-								<el-option v-for="item in state.columnData" :key="item.columnName" :label="item.columnName + ' [' + item.columnComment + ']'" :value="item.columnName" />
+								<el-option v-for="item in state.columnData" :key="item.propertyName" :label="item.propertyName + ' [' + item.columnComment + ']'" :value="item.propertyName" />
 							</el-select>
 						</el-form-item>
 					</el-col>