¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.DB; |
| | | |
| | | namespace WIDESEA_Core.Tenants |
| | | { |
| | | public static class TenantUtil |
| | | { |
| | | //public static SysTenant DefaultTenantConfig(this SysTenant tenant) |
| | | //{ |
| | | // tenant.DbType ??= DbType.Sqlite; |
| | | |
| | | // //å¦ææ²¡æé
ç½®è¿æ¥ |
| | | // if (tenant.Connection.IsNullOrEmpty()) |
| | | // { |
| | | // //æ¤å¤é»è®¤é
ç½® Sqlite å°å |
| | | // //å®é
ä¸å¡ä¸ ä¹ä¼æè¿ç»´ãç³»ç»ç®¡çåçæ¥ç»´æ¤ |
| | | // switch (tenant.DbType.Value) |
| | | // { |
| | | // case DbType.Sqlite: |
| | | // tenant.Connection = $"DataSource={Path.Combine(Environment.CurrentDirectory, tenant.ConfigId)}.db"; |
| | | // break; |
| | | // } |
| | | // } |
| | | |
| | | // return tenant; |
| | | //} |
| | | |
| | | //public static ConnectionConfig GetConnectionConfig(this SysTenant tenant) |
| | | //{ |
| | | // if (tenant.DbType is null) |
| | | // { |
| | | // throw new ArgumentException("Tenant DbType Must"); |
| | | // } |
| | | |
| | | |
| | | // return new ConnectionConfig() |
| | | // { |
| | | // ConfigId = tenant.ConfigId, |
| | | // DbType = tenant.DbType.Value, |
| | | // ConnectionString = tenant.Connection, |
| | | // IsAutoCloseConnection = true, |
| | | // MoreSettings = new ConnMoreSettings() |
| | | // { |
| | | // IsAutoRemoveDataCache = true |
| | | // }, |
| | | // }; |
| | | //} |
| | | |
| | | public static List<Type> GetTenantEntityTypes(TenantTypeEnum? tenantType = null) |
| | | { |
| | | List<Type> types = RepositorySetting.Entitys.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass).ToList(); |
| | | |
| | | List<Type> returnTypes = types.Where(s => IsTenantEntity(s, tenantType)).ToList(); |
| | | return returnTypes; |
| | | } |
| | | |
| | | public static bool IsTenantEntity(this Type u, TenantTypeEnum? tenantType = null) |
| | | { |
| | | var mta = u.GetCustomAttribute<MultiTenantAttribute>(); |
| | | if (mta is null) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | if (tenantType != null) |
| | | { |
| | | if (mta.TenantType != tenantType) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public static string GetTenantTableName(this Type type, ISqlSugarClient db, string id) |
| | | { |
| | | var entityInfo = db.EntityMaintenance.GetEntityInfo(type); |
| | | return $@"{entityInfo.DbTableName}_{id}"; |
| | | } |
| | | |
| | | //public static string GetTenantTableName(this Type type, ISqlSugarClient db, SysTenant tenant) |
| | | //{ |
| | | // return GetTenantTableName(type, db, tenant.Id.ToString()); |
| | | //} |
| | | |
| | | public static void SetTenantTable(this ISqlSugarClient db, string id) |
| | | { |
| | | var types = GetTenantEntityTypes(TenantTypeEnum.Tables); |
| | | |
| | | foreach (var type in types) |
| | | { |
| | | db.MappingTables.Add(type.Name, type.GetTenantTableName(db, id)); |
| | | } |
| | | } |
| | | |
| | | public static List<SelectModel> GetTenantSelectModels() |
| | | { |
| | | List<SelectModel> selectModels = new List<SelectModel>() |
| | | { |
| | | new SelectModel |
| | | { |
| | | FieldName = MainDb.TenantId |
| | | }, |
| | | //new SelectModel |
| | | //{ |
| | | // FieldName = MainDb.TenantName |
| | | //}, |
| | | new SelectModel |
| | | { |
| | | FieldName = MainDb.ConnectionString, |
| | | }, |
| | | new SelectModel |
| | | { |
| | | FieldName = MainDb.TenantDbType |
| | | } |
| | | }; |
| | | return selectModels; |
| | | } |
| | | } |
| | | } |