Merge pull request 'aq982' (#293) from aq982 into v2
Reviewed-on: https://code.adminnet.top/Admin.NET/Admin.NET.Pro/pulls/293
This commit is contained in:
commit
67aeba5345
58
Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs
Normal file
58
Admin.NET/Admin.NET.Core/Utils/SqlSugarExtensions.cs
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
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>();
|
||||
var tenantId = attr != null ? GetConfigIdFromAttribute(attr) : DefaultTenantId;
|
||||
return db.AsTenant().GetConnection(tenantId ?? DefaultTenantId);
|
||||
}
|
||||
|
||||
private static string GetConfigIdFromAttribute(TenantAttribute attr)
|
||||
{
|
||||
const string targetKey = "configId";
|
||||
var type = attr.GetType();
|
||||
|
||||
// 方式1:尝试通过属性获取
|
||||
var prop = type.GetProperty(targetKey,
|
||||
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
if (prop != null)
|
||||
{
|
||||
return prop.GetValue(attr) as string;
|
||||
}
|
||||
|
||||
// 方式2:尝试通过私有字段获取
|
||||
var fieldNames = new[]
|
||||
{
|
||||
$"<{targetKey}>k__BackingField", // 自动属性字段
|
||||
$"_{targetKey}", // 常规私有字段 (如_configId)
|
||||
$"m_{targetKey}", // 匈牙利命名法
|
||||
"configId" // 直接字段访问
|
||||
};
|
||||
|
||||
foreach (var name in fieldNames)
|
||||
{
|
||||
var field = type.GetField(name,
|
||||
BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
if (field != null)
|
||||
{
|
||||
return field.GetValue(attr) as string;
|
||||
}
|
||||
}
|
||||
|
||||
// 方式3:通过Dynamic访问(备用方案)
|
||||
try
|
||||
{
|
||||
dynamic d = attr;
|
||||
return d.configId;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,11 +81,11 @@ public partial class @(@Model.ClassName)Mid
|
||||
@: var key = $"@(@column.FkEntityName)_{t.@(@column.PropertyName)}";
|
||||
@: if (!sysCacheService.ExistKey(key))
|
||||
@: {
|
||||
@: var m = db.Queryable<@(@column.FkEntityName)>().FirstAsync(f => f.@(@column.FkLinkColumnName) == t.@(@column.PropertyName));
|
||||
@: var m = db.ForTenant<@(@column.FkEntityName)>().Queryable<@(@column.FkEntityName)>().FirstAsync(f => f.@(@column.FkLinkColumnName) == t.@(@column.PropertyName));
|
||||
@: if (m != null) sysCacheService.Set(key, m);
|
||||
@: }
|
||||
@: t.@(@column.PropertyName)@(@column.FkColumnName) = sysCacheService.Get<@(@column.FkEntityName)>(key)?.@(@column.FkColumnName);
|
||||
@: //t.@(@column.PropertyName)@(@column.FkColumnName)=db.Queryable<@(@column.FkEntityName)>().FirstAsync(f => f.@(@column.FkLinkColumnName) == t.@(@column.PropertyName))).@(@column.FkColumnName);//
|
||||
@: //t.@(@column.PropertyName)@(@column.FkColumnName)=db.Queryable<@(@column.FkEntityName)>().First(f => f.@(@column.FkLinkColumnName) == t.@(@column.PropertyName))).@(@column.FkColumnName);//
|
||||
@:})
|
||||
}
|
||||
else if(@column.EffectType == "ApiTreeSelector"){
|
||||
@ -95,7 +95,7 @@ public partial class @(@Model.ClassName)Mid
|
||||
@: var key = $"@(@column.FkEntityName)_{t.@(@column.PropertyName)}";
|
||||
@: if (!sysCacheService.ExistKey(key))
|
||||
@: {
|
||||
@: var m = db.Queryable<@(@column.FkEntityName)>().FirstAsync(f => f.@(@column.ValueColumn) == t.@(@column.PropertyName));
|
||||
@: var m = db.ForTenant<@(@column.FkEntityName)>().Queryable<@(@column.FkEntityName)>().First(f => f.@(@column.ValueColumn) == t.@(@column.PropertyName));
|
||||
@: if (m != null) sysCacheService.Set(key, m);
|
||||
@: }
|
||||
@: t.@(@column.PropertyName)@(@column.DisplayColumn) = sysCacheService.Get<@(@column.FkEntityName)>(key)?.@(@column.DisplayColumn);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user