增加 UnitOfWorkManager 类管理工作单元,移除 FreeSql.UnitOfWork.Current 静态属性;

This commit is contained in:
28810
2020-04-22 03:54:26 +08:00
parent 658540774e
commit fc4e834452
10 changed files with 276 additions and 34 deletions

View File

@ -70,12 +70,12 @@ namespace FreeSql
{
if (this.Repository == null)
return Orm.Update<TEntity>(this as TEntity)
.WithTransaction(UnitOfWork.Current.Value?.GetOrBeginTransaction())
.WithTransaction(CurrentUnitOfWork?.GetOrBeginTransaction())
.Set(a => (a as BaseEntity).IsDeleted, this.IsDeleted = value).ExecuteAffrows() == 1;
this.SetTenantId();
this.IsDeleted = value;
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.Update(this as TEntity) == 1;
}
/// <summary>
@ -89,7 +89,7 @@ namespace FreeSql
if (this.Repository == null)
return Orm.Delete<TEntity>(this as TEntity).ExecuteAffrows() == 1;
//this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.Delete(this as TEntity) == 1;
}
/// <summary>
@ -107,11 +107,11 @@ namespace FreeSql
this.UpdateTime = DateTime.Now;
if (this.Repository == null)
return Orm.Update<TEntity>()
.WithTransaction(UnitOfWork.Current.Value?.GetOrBeginTransaction())
.WithTransaction(CurrentUnitOfWork?.GetOrBeginTransaction())
.SetSource(this as TEntity).ExecuteAffrows() == 1;
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.Update(this as TEntity) == 1;
}
/// <summary>
@ -124,7 +124,7 @@ namespace FreeSql
this.Repository = Orm.GetRepository<TEntity>();
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.Insert(this as TEntity);
}
@ -139,7 +139,7 @@ namespace FreeSql
this.Repository = Orm.GetRepository<TEntity>();
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.InsertOrUpdate(this as TEntity);
}
@ -152,7 +152,7 @@ namespace FreeSql
if (this.Repository == null)
this.Repository = Orm.GetRepository<TEntity>();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
this.Repository.SaveMany(this as TEntity, navigatePropertyName);
}
}

View File

@ -53,11 +53,11 @@ namespace FreeSql
{
if (this.Repository == null)
return await Orm.Update<TEntity>(this as TEntity)
.WithTransaction(UnitOfWork.Current.Value?.GetOrBeginTransaction())
.WithTransaction(CurrentUnitOfWork?.GetOrBeginTransaction())
.Set(a => (a as BaseEntity).IsDeleted, this.IsDeleted = value).ExecuteAffrowsAsync() == 1;
this.IsDeleted = value;
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return await this.Repository.UpdateAsync(this as TEntity) == 1;
}
/// <summary>
@ -71,7 +71,7 @@ namespace FreeSql
if (this.Repository == null)
return await Orm.Delete<TEntity>(this as TEntity).ExecuteAffrowsAsync() == 1;
//this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return await this.Repository.DeleteAsync(this as TEntity) == 1;
}
/// <summary>
@ -89,11 +89,11 @@ namespace FreeSql
this.UpdateTime = DateTime.Now;
if (this.Repository == null)
return await Orm.Update<TEntity>()
.WithTransaction(UnitOfWork.Current.Value?.GetOrBeginTransaction())
.WithTransaction(CurrentUnitOfWork?.GetOrBeginTransaction())
.SetSource(this as TEntity).ExecuteAffrowsAsync() == 1;
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return await this.Repository.UpdateAsync(this as TEntity) == 1;
}
/// <summary>
@ -106,7 +106,7 @@ namespace FreeSql
this.Repository = Orm.GetRepository<TEntity>();
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.InsertAsync(this as TEntity);
}
@ -121,7 +121,7 @@ namespace FreeSql
this.Repository = Orm.GetRepository<TEntity>();
this.SetTenantId();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.InsertOrUpdateAsync(this as TEntity);
}
@ -134,7 +134,7 @@ namespace FreeSql
if (this.Repository == null)
this.Repository = Orm.GetRepository<TEntity>();
this.Repository.UnitOfWork = UnitOfWork.Current.Value;
this.Repository.UnitOfWork = CurrentUnitOfWork;
return this.Repository.SaveManyAsync(this as TEntity, navigatePropertyName);
}
}

View File

@ -106,9 +106,11 @@ namespace FreeSql
{
var uow = Orm.CreateUnitOfWork();
uow.IsolationLevel = level;
CurrentUnitOfWork = uow;
return uow;
}
static readonly AsyncLocal<IUnitOfWork> _AsyncUnitOfWork = new AsyncLocal<IUnitOfWork>();
static readonly AsyncLocal<string> _AsyncTenantId = new AsyncLocal<string>();
/// <summary>
/// 获取或设置当前租户id
@ -118,6 +120,14 @@ namespace FreeSql
get => _AsyncTenantId.Value;
set => _AsyncTenantId.Value = value;
}
/// <summary>
/// 获取或设置当前租户id
/// </summary>
public static IUnitOfWork CurrentUnitOfWork
{
get => _AsyncUnitOfWork.Value;
set => _AsyncUnitOfWork.Value = value;
}
}
/// <summary>
@ -143,7 +153,7 @@ namespace FreeSql
{
var select = Orm.Select<TEntity>()
.TrackToList(TrackToList) //自动为每个元素 Attach
.WithTransaction(UnitOfWork.Current.Value?.GetOrBeginTransaction(false));
.WithTransaction(CurrentUnitOfWork?.GetOrBeginTransaction(false));
if (string.IsNullOrEmpty(CurrentTenantId) == false)
select.WhereCascade(a => (a as ITenant).TenantId == CurrentTenantId);
return select.WhereCascade(a => (a as BaseEntity).IsDeleted == false);

View File

@ -79,7 +79,7 @@ namespace FreeSql
buf.Add(this as TEntity);
buf.AddRange(this.GetAllChilds());
var repo = Orm.GetRepository<TEntity>();
repo.UnitOfWork = UnitOfWork.Current.Value;
repo.UnitOfWork = CurrentUnitOfWork;
buf = repo.Select.WhereDynamic(buf)
.Include(a => ((((((((((a as BaseEntityTree<TEntity, TKey>).Parent
as BaseEntityTree<TEntity, TKey>).Parent
@ -110,7 +110,7 @@ namespace FreeSql
var childs = GetAllChilds();
childs.Add(this as TEntity);
var repo = Orm.GetRepository<TEntity>();
repo.UnitOfWork = UnitOfWork.Current.Value;
repo.UnitOfWork = CurrentUnitOfWork;
repo.Attach(childs);
foreach (var item in childs)
(item as BaseEntity).IsDeleted = false;