Parcourir la source

修复 PostgreSQL 并启用 驼峰转下划线 时,报某些字段不存在错误

夜鹰 il y a 8 mois
Parent
commit
5514bdc25e

+ 7 - 2
Admin.NET/Admin.NET.Core/Service/APIJSON/SelectTable.cs

@@ -473,12 +473,17 @@ public class SelectTable : ISingleton
             // 判断列表是否有权限  sum(1)、sum(*)、Count(1)这样的值直接有效
             if (colName == "*" || int.TryParse(colName, out int colNumber) || (IsCol(subtable, colName) && _identitySvc.ColIsRole(colName, selectrole.Split(','))))
             {
+                // 字段名加引号,防止和SQL关键字冲突(mysql为反引号)
+                string qm = "\"";
+                if (tb.Context.CurrentConnectionConfig.DbType is SqlSugar.DbType.MySql)
+                    qm = "`";
+
                 if (ziduan.Length > 1)
                 {
                     if (ziduan[1].Length > 20)
                         throw new Exception("别名不能超过20个字符");
 
-                    str.Append(ziduan[0] + " as `" + ReplaceSQLChar(ziduan[1]) + "`,");
+                    str.Append(ziduan[0] + " as " + qm + ReplaceSQLChar(ziduan[1]) + qm + ",");
                 }
                 // 不对函数加``,解决sum(*)、Count(1)等不能使用的问题
                 else if (ziduan[0].Contains('('))
@@ -486,7 +491,7 @@ public class SelectTable : ISingleton
                     str.Append(ziduan[0] + ",");
                 }
                 else
-                    str.Append("`" + ziduan[0] + "`" + ",");
+                    str.Append(qm + ziduan[0] + qm + ",");
             }
         }
         if (string.IsNullOrEmpty(str.ToString()))

+ 8 - 2
Admin.NET/Admin.NET.Core/Service/Config/SysTenantConfigService.cs

@@ -27,8 +27,14 @@ public class SysTenantConfigService : IDynamicApiController, ITransient
         _sysCacheService = sysCacheService;
         _sysConfigRep = sysConfigRep;
         _sysConfigDataRep = sysConfigDataRep;
-        VSysConfig = _sysConfigRep.AsQueryable().InnerJoin(_sysConfigDataRep.AsQueryable().WhereIF(!_userManager.SuperAdmin, cv => cv.TenantId == _userManager.TenantId),
-            (c, cv) => c.Id == cv.ConfigId).Select<SysConfig>().MergeTable();
+        VSysConfig = _sysConfigRep.AsQueryable()
+            .InnerJoin(
+                _sysConfigDataRep.AsQueryable().WhereIF(!_userManager.SuperAdmin, cv => cv.TenantId == _userManager.TenantId),
+                (c, cv) => c.Id == cv.ConfigId
+            )
+            //.Select<SysConfig>().MergeTable();
+            // 解决PostgreSQL下并启用驼峰转下划线时,报字段不存在,SqlSugar在Select后生成的sql, as后没转下划线导致.
+            .SelectMergeTable((c, cv) => new SysConfig { Id = c.Id.SelectAll(), Value = cv.Value });
     }
 
     /// <summary>

+ 8 - 2
Admin.NET/Admin.NET.Core/Service/Config/SysUserConfigService.cs

@@ -27,8 +27,14 @@ public class SysUserConfigService : IDynamicApiController, ITransient
         _sysCacheService = sysCacheService;
         _sysConfigRep = sysConfigRep;
         _sysConfigDataRep = sysConfigDataRep;
-        VSysConfig = _sysConfigRep.AsQueryable().LeftJoin(_sysConfigDataRep.AsQueryable().WhereIF(_userManager.SuperAdmin, cv => cv.UserId == _userManager.UserId),
-            (c, cv) => c.Id == cv.ConfigId).Select<SysConfig>().MergeTable();
+        VSysConfig = _sysConfigRep.AsQueryable()
+            .LeftJoin(
+                _sysConfigDataRep.AsQueryable().WhereIF(_userManager.SuperAdmin, cv => cv.UserId == _userManager.UserId),
+                (c, cv) => c.Id == cv.ConfigId
+            )
+            //.Select<SysConfig>().MergeTable();
+            // 解决PostgreSQL下并启用驼峰转下划线时,报字段不存在,SqlSugar在Select后生成的sql, as后没转下划线导致.
+            .SelectMergeTable((c, cv) => new SysConfig { Id = c.Id.SelectAll(), Value = cv.Value });
     }
 
     /// <summary>