UNIVPLMDataIntegration/Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs

57 lines
1.7 KiB
C#
Raw Normal View History


namespace Admin.NET.Core.Utils;
public static class SqlSugarExtensions
{
private const string DefaultTenantId = "1300000000001";
public static ISqlSugarClient ForTenant<TEntity>(
this ISqlSugarClient db)
{
var attr = typeof(TEntity).GetCustomAttribute<TenantAttribute>();
// 当特性不存在时使用默认租户
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;
}
}