77 lines
2.8 KiB
C#

using Learun.Cache.Redis;
using Learun.Util;
using Learun.Util.SqlSugar;
using SqlSugar;
using System;
using System.Linq;
using System.Reflection;
using System.Windows.Documents;
namespace Learun.Application.TwoDevelopment.ZZDT_EC
{
public class ProjectSugar //不能是泛型类
{
private static string redisKey = "_ec_project";//不需要后缀
/// <summary>
/// 按项目取表名
/// </summary>
/// <typeparam name="T">实体类Entity</typeparam>
/// <param name="projectIdOrIndex">项目ID或Index</param>
/// <returns></returns>
public static string TableName<T>(string projectIdOrIndex) where T : class, new()
{
//按项目取表名公用方法
string tableName = SqlSugarHelper.Db.EntityMaintenance.GetTableName<T>();
if (int.TryParse(projectIdOrIndex, out int ProjIndex))
{
tableName += "_" + projectIdOrIndex;//免得再去查一下数据库,直接给index的情况下
}
else if (!projectIdOrIndex.IsEmpty())
{
//var project = SqlSugarHelper.Db.Queryable<ec_projectEntity>().First(x => x.ProjectId == projectIdOrIndex);
var list = new CacheByRedis().GetRedisOrDBData(redisKey,"", () => SqlSugarHelper.Db.Queryable<ec_projectEntity>().ToList());
if (list != null)
{
var project = list.FirstOrDefault(x=>x.ProjectId == projectIdOrIndex);
if (project != null)
{
tableName += "_" + project.ProjectIndex.Value;
}
else
{
throw ExceptionEx.ThrowServiceException(new System.Exception(), "无效的ProjectId");
}
}
}
return tableName;//空就返回原表名
}
public static Type FindEntityTypeByTableName(string tableName)
{
// 假设所有实体类都在这个命名空间或者程序集
var allTypes = Assembly.GetExecutingAssembly().GetTypes();
foreach (var type in allTypes)
{
if (!type.IsClass) continue;
var attr = type.GetCustomAttribute<SugarTable>();
if (attr != null && string.Equals(attr.TableName, tableName, StringComparison.OrdinalIgnoreCase))
{
return type;
}
// 或者类名就等于表名(如果没加特性)
if (attr == null && string.Equals(type.Name, tableName, StringComparison.OrdinalIgnoreCase))
{
return type;
}
}
return null; // 没找到
}
}
}