namespace Admin.NET.Core.Utils; public static class SqlSugarExtensions { private const string DefaultTenantId = "1300000000001"; 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); } private static string GetTenantIdFromAttribute(TenantAttribute attr) { const string tenantIdKey = "TenantId"; var type = attr.GetType(); // 尝试通过属性获取 var prop = type.GetProperty(tenantIdKey, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (prop != null) { return prop.GetValue(attr) as string; } // 尝试通过私有字段获取(兼容不同命名规范) var fields = new[] { $"<{tenantIdKey}>k__BackingField", // 编译器生成字段 $"_{tenantIdKey.ToLower()}", // 常规私有字段 $"m_{tenantIdKey}" // 其他可能的前缀 }; foreach (var fieldName in fields) { var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); if (field != null) { return field.GetValue(attr) as string; } } return null; } }