From dc58f9397f9a9a208ad7dc2c3e39347ca4988b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B7=B3?= Date: Sun, 6 Nov 2022 20:22:32 +0800 Subject: [PATCH] =?UTF-8?q?saas=E5=88=86=E5=BA=93=EF=BC=8C=E4=BB=93?= =?UTF-8?q?=E5=82=A8+=E5=85=AC=E5=85=B1=E5=BA=93+=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E5=BA=93+=E5=8A=A8=E6=80=81=E9=85=8D=E7=BD=AE=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E4=B8=B2=E6=A1=86=E6=9E=B6=E6=90=AD=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Yi.Framework.Repository/Repository.cs | 79 +++++++++---------- .../MiddlewareExtend/SqlsugarExtension.cs | 1 + 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs b/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs index 7973c181..94a7ed38 100644 --- a/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs +++ b/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs @@ -16,7 +16,7 @@ namespace Yi.Framework.Repository [AppService] public class Repository : SimpleClient, IRepository where T : class, new() { - + public ISugarQueryable _DbQueryable { get { return base.Context.Queryable(); } set { } } public ISqlSugarClient _Db { get { return base.Context; } set { } } @@ -26,21 +26,40 @@ namespace Yi.Framework.Repository /// public Repository(ISqlSugarClient context) : base(context)//注意这里要有默认值等于null { - //开始Saas分库! - //单个公共基础库+多个租户业务库 - - //1:先判断操作对应实体上是否存在租户特性,如果存在说明是公共库 + ////开始Saas分库! + ////单个公共基础库+多个租户业务库 - //如果是公共库,直接使用默认库即可 - //如果不是公共库 + ////1:先判断操作对应实体上是否存在租户特性,如果存在说明是公共库 + //var anyTenant = typeof(T).GetCustomAttributes(false).Any(a => a.GetType().Equals(typeof(TenantAttribute))); - //2:根据上下文对象获取用户的租户id - //3:根据租户id获取到对应上下文对象 - //4:替换仓储中的上下文对象即可 - - //强化:如果租户要做到动态配置不写死,租户信息连接字符串等存入数据库,带入token中,还需要在sqlsugarAop中动态获取进行切换 - //base.Context = context.AsTenant().GetConnectionScopeWithAttr(); + ////如果是公共库,直接使用默认库即可 + //if (anyTenant) + //{ + // base.Context = _Db.AsTenant().GetConnectionScope("0"); + //} + ////如果不是公共库 + //else + //{ + // //2:根据上下文对象获取用户的租户id、数据库连接串及用户信息 + // string tenantId = "获取用户的租户id"; + // string connection = "获取用户信息中的数据库连接字符串"; + // //如果该租户未添加到db对象中 + // if (!_Db.AsTenant().IsAnyConnection(tenantId)) + // { + // //添加业务库只在当前上下文有效 + // _Db.AsTenant().AddConnection(new ConnectionConfig() + // { + // ConfigId = tenantId, + // ConnectionString = connection, + // //数据库类型同样可以动态配置 + // DbType = SqlSugar.DbType.MySql, + // IsAutoCloseConnection = true + // }); + // } + // //3:根据租户id获取到对应db对象,替换仓储中的db对象即可 + // base.Context = _Db.AsTenant().GetConnectionScope(tenantId); + //} } /// @@ -74,20 +93,9 @@ namespace Yi.Framework.Repository /// public async Task UseSqlAsync(string sql, object parameters) { - return await _Db.Ado.ExecuteCommandAsync(sql, parameters) >0; + return await _Db.Ado.ExecuteCommandAsync(sql, parameters) > 0; } - ///// - ///// 添加返回实体 - ///// - ///// - ///// - //public async Task InsertReturnEntityAsync(T entity) - //{ - // entity.Id =SnowFlakeSingle.instance.getID(); - // return await _Db.Insertable(entity).ExecuteReturnEntityAsync(); - //} - /// /// 更新忽略空值 /// @@ -95,22 +103,10 @@ namespace Yi.Framework.Repository /// public async Task UpdateIgnoreNullAsync(T entity) { - return await _Db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync()>0; + return await _Db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync() > 0; } - ///// - ///// 逻辑多删除 - ///// - ///// - //public async Task DeleteByLogicAsync(List ids) - //{ - // var entitys = await _Db.Queryable().Where(u => ids.Contains(u.Id)).ToListAsync(); - // entitys.ForEach(u=>u.IsDeleted=true); - // return await _Db.Updateable(entitys).ExecuteCommandAsync()>0; - //} - - /// /// 调用存储过程 /// @@ -138,10 +134,10 @@ namespace Yi.Framework.Repository /// 仓储扩展方法:单表查询通用分页 /// /// - public async Task>> CommonPageAsync(QueryPageCondition pars) + public async Task>> CommonPageAsync(QueryPageCondition pars) { RefAsync tolCount = 0; - var result = await QueryConditionHandler(new QueryCondition() {OrderBys=pars.OrderBys,Parameters=pars.Parameters } ).ToPageListAsync(pars.Index, pars.Size, tolCount); + var result = await QueryConditionHandler(new QueryCondition() { OrderBys = pars.OrderBys, Parameters = pars.Parameters }).ToPageListAsync(pars.Index, pars.Size, tolCount); return new PageModel> { Total = tolCount.Value, @@ -150,7 +146,6 @@ namespace Yi.Framework.Repository } - public ISugarQueryable QueryConditionHandler(QueryCondition pars) { var sugarParamters = pars.Parameters.Select(it => (IConditionalModel)new ConditionalModel() @@ -228,5 +223,5 @@ namespace Yi.Framework.Repository } } - + } \ No newline at end of file diff --git a/Yi.Framework.Net6/Yi.Framework.WebCore/MiddlewareExtend/SqlsugarExtension.cs b/Yi.Framework.Net6/Yi.Framework.WebCore/MiddlewareExtend/SqlsugarExtension.cs index 42a88bd3..5603bc64 100644 --- a/Yi.Framework.Net6/Yi.Framework.WebCore/MiddlewareExtend/SqlsugarExtension.cs +++ b/Yi.Framework.Net6/Yi.Framework.WebCore/MiddlewareExtend/SqlsugarExtension.cs @@ -23,6 +23,7 @@ namespace Yi.Framework.WebCore.MiddlewareExtend readCon.ForEach(s => { + //如果是动态saas分库,这里的连接串都不能写死,需要动态添加,这里只配置共享库的连接 slavaConFig.Add(new SlaveConnectionConfig() { ConnectionString = s }); }); }