pref: 优化db工作单元
This commit is contained in:
@@ -35,8 +35,7 @@ namespace Yi.Framework.SqlSugarCore.Uow
|
|||||||
CurrentTenant = currentTenant;
|
CurrentTenant = currentTenant;
|
||||||
Logger = NullLogger<UnitOfWorkSqlsugarDbContextProvider<TDbContext>>.Instance;
|
Logger = NullLogger<UnitOfWorkSqlsugarDbContextProvider<TDbContext>>.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
//private static object _databaseApiLock = new object();
|
|
||||||
public virtual async Task<TDbContext> GetDbContextAsync()
|
public virtual async Task<TDbContext> GetDbContextAsync()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -48,19 +47,16 @@ namespace Yi.Framework.SqlSugarCore.Uow
|
|||||||
|
|
||||||
|
|
||||||
var unitOfWork = UnitOfWorkManager.Current;
|
var unitOfWork = UnitOfWorkManager.Current;
|
||||||
if (unitOfWork == null /*|| unitOfWork.Options.IsTransactional == false*/)
|
if (unitOfWork == null )
|
||||||
{
|
{
|
||||||
var dbContext = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>();
|
//var dbContext = (TDbContext)ServiceProvider.GetRequiredService<ISqlSugarDbContext>();
|
||||||
//提高体验,取消工作单元强制性
|
|
||||||
//throw new AbpException("A DbContext can only be created inside a unit of work!");
|
|
||||||
//如果不启用工作单元,创建一个新的db,不开启事务即可
|
//如果不启用工作单元,创建一个新的db,不开启事务即可
|
||||||
return dbContext;
|
//return dbContext;
|
||||||
|
|
||||||
|
//2024-11-30,改回强制性使用工作单元,否则容易造成歧义
|
||||||
|
throw new AbpException("DbContext 只能在工作单元内工作,当前DbContext没有工作单元,如需创建新线程并发操作,请手动创建工作单元");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//尝试当前工作单元获取db
|
//尝试当前工作单元获取db
|
||||||
var databaseApi = unitOfWork.FindDatabaseApi(dbContextKey);
|
var databaseApi = unitOfWork.FindDatabaseApi(dbContextKey);
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ namespace Yi.Abp.Application.Services
|
|||||||
public async Task GetUowAsync()
|
public async Task GetUowAsync()
|
||||||
{
|
{
|
||||||
//魔改
|
//魔改
|
||||||
// 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持多线程无工作单元,支持。。。
|
// 用户体验优先,万金油模式,支持高并发。支持单、多线程并发安全,支持多线程工作单元,支持。。。
|
||||||
|
// 不支持多线程无工作单元,应由工作单元统一管理(来自abp工作单元设计)
|
||||||
// 请注意,如果requiresNew: true只有在没有工作单元内使用,嵌套子工作单元,默认值false即可
|
// 请注意,如果requiresNew: true只有在没有工作单元内使用,嵌套子工作单元,默认值false即可
|
||||||
// 自动在各个情况处理db客户端最优解之一
|
// 自动在各个情况处理db客户端最优解之一
|
||||||
int i = 3;
|
int i = 3;
|
||||||
@@ -78,7 +79,8 @@ namespace Yi.Abp.Application.Services
|
|||||||
{
|
{
|
||||||
tasks.Add(Task.Run(async () =>
|
tasks.Add(Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await sqlSugarRepository.InsertAsync(new BannerAggregateRoot { Name = "插入2" });
|
//以下操作是错误的,不允许在新线程中,直接操作db,所有db操作应放在工作单元内,应由工作单元统一管理-来自abp工作单元设计
|
||||||
|
//await sqlSugarRepository.InsertAsync(new BannerAggregateRoot { Name = "插入2" });
|
||||||
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
|
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
|
||||||
{
|
{
|
||||||
await sqlSugarRepository.InsertAsync(new BannerAggregateRoot { Name = "插入1" });
|
await sqlSugarRepository.InsertAsync(new BannerAggregateRoot { Name = "插入1" });
|
||||||
|
|||||||
Reference in New Issue
Block a user