From 8d58fa2270fa5cd98d066cb6248030012900d5f1 Mon Sep 17 00:00:00 2001 From: lqc <15342622+aq982@user.noreply.gitee.com> Date: Wed, 12 Mar 2025 10:08:57 +0800 Subject: [PATCH] =?UTF-8?q?SqlSugarExtensions=E6=89=A9=E5=B1=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Utils/SqlSugarExtensions.cs | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs b/Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs index cd4d7e34..8b1bff64 100644 --- a/Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs +++ b/Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs @@ -4,46 +4,38 @@ public static class SqlSugarExtensions { private const string DefaultTenantId = "1300000000001"; - public static ISqlSugarClient ForTenant( - this ISqlSugarClient db) + public static ISqlSugarClient ForTenant(this ISqlSugarClient db) { var attr = typeof(TEntity).GetCustomAttribute(); - - // 当特性不存在时使用默认租户 - if (attr == null) - { - return db.AsTenant().GetConnection(DefaultTenantId); - } - - // 反射获取租户ID(兼容多种字段命名) - var tenantId = GetTenantIdFromAttribute(attr) ?? DefaultTenantId; - - return db.AsTenant().GetConnection(tenantId); + var tenantId = attr != null ? GetConfigIdFromAttribute(attr) : DefaultTenantId; + return db.AsTenant().GetConnection(tenantId ?? DefaultTenantId); } - private static string GetTenantIdFromAttribute(TenantAttribute attr) + private static string GetConfigIdFromAttribute(TenantAttribute attr) { - const string tenantIdKey = "TenantId"; + const string targetKey = "configId"; var type = attr.GetType(); - // 尝试通过属性获取 - var prop = type.GetProperty(tenantIdKey, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + // 方式1:尝试通过属性获取 + var prop = type.GetProperty(targetKey, + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (prop != null) { return prop.GetValue(attr) as string; } - // 尝试通过私有字段获取(兼容不同命名规范) - var fields = new[] + // 方式2:尝试通过私有字段获取 + var fieldNames = new[] { - $"<{tenantIdKey}>k__BackingField", // 编译器生成字段 - $"_{tenantIdKey.ToLower()}", // 常规私有字段 - $"m_{tenantIdKey}" // 其他可能的前缀 + $"<{targetKey}>k__BackingField", // 自动属性字段 + $"_{targetKey}", // 常规私有字段 (如_configId) + $"m_{targetKey}", // 匈牙利命名法 + "configId" // 直接字段访问 }; - foreach (var fieldName in fields) + foreach (var name in fieldNames) { - var field = type.GetField(fieldName, + var field = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Instance); if (field != null) { @@ -51,6 +43,16 @@ public static class SqlSugarExtensions } } - return null; + // 方式3:通过Dynamic访问(备用方案) + try + { + dynamic d = attr; + return d.configId; + } + catch + { + return null; + } } } +