feat: 添加db作用域模式

This commit is contained in:
橙子
2024-06-11 22:34:36 +08:00
parent 26dbc8d00d
commit 14db420cbe
3 changed files with 18 additions and 15 deletions

View File

@@ -11,22 +11,23 @@ namespace Yi.Framework.SqlSugarCore
{ {
public static class SqlsugarCoreExtensions public static class SqlsugarCoreExtensions
{ {
public static IServiceCollection AddYiDbContext<DbContext>(this IServiceCollection service) where DbContext : class, ISqlSugarDbContext public static IServiceCollection AddYiDbContext<DbContext>(this IServiceCollection service, ServiceLifetime serviceLifetime = ServiceLifetime.Transient) where DbContext : class, ISqlSugarDbContext
{ {
service.Replace(new ServiceDescriptor(typeof(ISqlSugarDbContext), typeof(DbContext), ServiceLifetime.Transient)); service.Replace(new ServiceDescriptor(typeof(ISqlSugarDbContext), typeof(DbContext), serviceLifetime));
return service; return service;
} }
public static IServiceCollection TryAddYiDbContext<DbContext>(this IServiceCollection service) where DbContext : class, ISqlSugarDbContext public static IServiceCollection TryAddYiDbContext<DbContext>(this IServiceCollection service, ServiceLifetime serviceLifetime = ServiceLifetime.Transient) where DbContext : class, ISqlSugarDbContext
{ {
service.TryAdd(new ServiceDescriptor(typeof(ISqlSugarDbContext), typeof(DbContext), ServiceLifetime.Transient)); service.TryAdd(new ServiceDescriptor(typeof(ISqlSugarDbContext), typeof(DbContext), serviceLifetime));
return service; return service;
} }
public static IServiceCollection AddYiDbContext<DbContext>(this IServiceCollection service,Action<DbConnOptions> options) where DbContext : class, ISqlSugarDbContext public static IServiceCollection AddYiDbContext<DbContext>(this IServiceCollection service, Action<DbConnOptions> options) where DbContext : class, ISqlSugarDbContext
{ {
service.Configure<DbConnOptions>(ops => { service.Configure<DbConnOptions>(ops =>
{
options.Invoke(ops); options.Invoke(ops);
}); });
service.AddYiDbContext<DbContext>(); service.AddYiDbContext<DbContext>();

View File

@@ -52,13 +52,13 @@ namespace Yi.Framework.SqlSugarCore.Uow
var unitOfWork = UnitOfWorkManager.Current; var unitOfWork = UnitOfWorkManager.Current;
if (unitOfWork == null || unitOfWork.Options.IsTransactional == false) if (unitOfWork == null /*|| unitOfWork.Options.IsTransactional == false*/)
{ {
if (ContextInstance.Current is null) //if (ContextInstance.Current is null)
{ //{
ContextInstance.Current = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>(); // ContextInstance.Current = ;
} //}
var dbContext = (TDbContext)ContextInstance.Current; var dbContext = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>();
//提高体验,取消工作单元强制性 //提高体验,取消工作单元强制性
//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不开启事务即可
@@ -81,6 +81,7 @@ namespace Yi.Framework.SqlSugarCore.Uow
CreateDbContextAsync(unitOfWork, connectionStringName, connectionString).Result CreateDbContextAsync(unitOfWork, connectionStringName, connectionString).Result
); );
await Console.Out.WriteLineAsync(">>>----------------实例化了db"+ ((SqlSugarDatabaseApi)databaseApi).DbContext.SqlSugarClient.ContextID.ToString());
//创建的db加入到当前工作单元中 //创建的db加入到当前工作单元中
unitOfWork.AddDatabaseApi(dbContextKey, databaseApi); unitOfWork.AddDatabaseApi(dbContextKey, databaseApi);

View File

@@ -55,9 +55,10 @@ namespace Yi.Abp.Application.Services
//魔改 //魔改
// 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持多线程无工作单元,支持。。。 // 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持多线程无工作单元,支持。。。
// 自动在各个情况处理db客户端最优解之一 // 自动在各个情况处理db客户端最优解之一
int i = 10; int i = 3;
List<Task> tasks = new List<Task>(); List<Task> tasks = new List<Task>();
await sqlSugarRepository.GetListAsync();
await sqlSugarRepository.GetListAsync();
while (i > 0) while (i > 0)
{ {
tasks.Add(Task.Run(async () => tasks.Add(Task.Run(async () =>