chore: 构建

This commit is contained in:
陈淳
2024-01-25 10:26:10 +08:00
parent 98896f838b
commit b5d8d43e72
2 changed files with 41 additions and 35 deletions

View File

@@ -44,6 +44,13 @@ namespace Yi.Framework.SqlSugarCore.Uow
public virtual async Task<TDbContext> GetDbContextAsync() public virtual async Task<TDbContext> GetDbContextAsync()
{ {
var connectionStringName = ConnectionStrings.DefaultConnectionStringName;
//获取当前连接字符串,未多租户时,默认为空
var connectionString = await ResolveConnectionStringAsync(connectionStringName);
var dbContextKey = $"{this.GetType().FullName}_{connectionString}";
var unitOfWork = UnitOfWorkManager.Current; var unitOfWork = UnitOfWorkManager.Current;
if (unitOfWork == null || unitOfWork.Options.IsTransactional == false) if (unitOfWork == null || unitOfWork.Options.IsTransactional == false)
{ {
@@ -51,17 +58,14 @@ namespace Yi.Framework.SqlSugarCore.Uow
{ {
ContextInstance.Current = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>(); ContextInstance.Current = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>();
} }
var dbContext = (TDbContext)ContextInstance.Current;
var output = DatabaseChange(dbContext, connectionStringName, connectionString);
//提高体验,取消工作单元强制性 //提高体验,取消工作单元强制性
//throw new AbpException("A DbContext can only be created inside a unit of work!"); //throw new AbpException("A DbContext can only be created inside a unit of work!");
//如果不启用工作单元创建一个新的db不开启事务即可 //如果不启用工作单元创建一个新的db不开启事务即可
return (TDbContext)ContextInstance.Current; return output;
} }
var connectionStringName = ConnectionStrings.DefaultConnectionStringName;
//获取当前连接字符串,未多租户时,默认为空
var connectionString = await ResolveConnectionStringAsync(connectionStringName);
var dbContextKey = $"{this.GetType().FullName}_{connectionString}";
@@ -97,13 +101,6 @@ namespace Yi.Framework.SqlSugarCore.Uow
{ {
var dbContext = await CreateDbContextAsync(unitOfWork); var dbContext = await CreateDbContextAsync(unitOfWork);
//没有检测到使用多租户功能,默认使用默认库即可
if (string.IsNullOrWhiteSpace(connectionString))
{
connectionString = dbContext.Options.Url;
connectionStringName = DbConnOptions.TenantDbDefaultName;
}
//获取到DB之后对多租户多库进行处理 //获取到DB之后对多租户多库进行处理
var changedDbContext = DatabaseChange(dbContext, connectionStringName, connectionString); var changedDbContext = DatabaseChange(dbContext, connectionStringName, connectionString);
return changedDbContext; return changedDbContext;
@@ -112,6 +109,13 @@ namespace Yi.Framework.SqlSugarCore.Uow
protected virtual TDbContext DatabaseChange(TDbContext dbContext, string configId, string connectionString) protected virtual TDbContext DatabaseChange(TDbContext dbContext, string configId, string connectionString)
{ {
//没有检测到使用多租户功能,默认使用默认库即可
if (string.IsNullOrWhiteSpace(connectionString))
{
connectionString = dbContext.Options.Url;
configId = DbConnOptions.TenantDbDefaultName;
}
var dbOption = dbContext.Options; var dbOption = dbContext.Options;
var db = dbContext.SqlSugarClient.AsTenant(); var db = dbContext.SqlSugarClient.AsTenant();
//主库的Db切换当操作的是租户表的时候 //主库的Db切换当操作的是租户表的时候

View File

@@ -16,7 +16,8 @@ namespace Yi.Abp.Application.Services
public class TestService : ApplicationService public class TestService : ApplicationService
{ {
/// <summary> /// <summary>
/// 属性注入,不推荐,坑太多,容易把自己玩死,简单的东西可以用一用 /// 属性注入
/// 不推荐,坑太多,容易把自己玩死,简单的东西可以用一用
/// </summary> /// </summary>
public ISqlSugarRepository<BannerEntity> sqlSugarRepository { get; set; } public ISqlSugarRepository<BannerEntity> sqlSugarRepository { get; set; }
@@ -45,11 +46,12 @@ namespace Yi.Abp.Application.Services
} }
/// <summary> /// <summary>
/// 工作单元魔改 /// 工作单元
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task GetUowAsync() public async Task GetUowAsync()
{ {
//魔改
// 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持多线程无工作单元,支持。。。 // 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持多线程无工作单元,支持。。。
// 自动在各个情况处理db客户端最优解之一 // 自动在各个情况处理db客户端最优解之一
int i = 10; int i = 10;