Merge branch 'master' of gitee.com:dotnetchina/SqlSugar

This commit is contained in:
sunkaixuan 2024-01-25 17:57:28 +08:00
commit 3722f2ef8d
2 changed files with 31 additions and 5 deletions

View File

@ -13,6 +13,7 @@ namespace SqlSugar
RepositoryType CopyNew<RepositoryType>() where RepositoryType : ISugarRepository; RepositoryType CopyNew<RepositoryType>() where RepositoryType : ISugarRepository;
SimpleClient<ChangeType> Change<ChangeType>() where ChangeType : class, new(); SimpleClient<ChangeType> Change<ChangeType>() where ChangeType : class, new();
RepositoryType ChangeRepository<RepositoryType>() where RepositoryType : ISugarRepository ; RepositoryType ChangeRepository<RepositoryType>() where RepositoryType : ISugarRepository ;
RepositoryType ChangeRepository<RepositoryType>(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository;
IDeleteable<T> AsDeleteable(); IDeleteable<T> AsDeleteable();
IInsertable<T> AsInsertable(List<T> insertObjs); IInsertable<T> AsInsertable(List<T> insertObjs);
IInsertable<T> AsInsertable(T insertObj); IInsertable<T> AsInsertable(T insertObj);

View File

@ -79,11 +79,11 @@ namespace SqlSugar
} }
public RepositoryType CopyNew<RepositoryType>(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository public RepositoryType CopyNew<RepositoryType>(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository
{ {
var instance = handleDependencies(typeof(RepositoryType), serviceProvider); var instance = handleDependencies(typeof(RepositoryType), serviceProvider,true);
return (RepositoryType)instance; return (RepositoryType)instance;
} }
private object handleDependencies(Type type, IServiceProvider serviceProvider) private object handleDependencies(Type type, IServiceProvider serviceProvider,bool needNewCopy = false)
{ {
ConstructorInfo constructorInfo = null; ConstructorInfo constructorInfo = null;
var newInstanceType = type; var newInstanceType = type;
@ -103,8 +103,7 @@ namespace SqlSugar
object dependencyInstance = serviceProvider.GetService(type); object dependencyInstance = serviceProvider.GetService(type);
if (dependencyInstance is ISugarRepository sugarRepository) if (dependencyInstance is ISugarRepository sugarRepository)
{ {
sugarRepository.Context = sugarRepository.Context.CopyNew(); return setContext(sugarRepository, needNewCopy);
return sugarRepository;
} }
else else
{ {
@ -130,7 +129,28 @@ namespace SqlSugar
} }
return instance; return instance;
} }
private ISugarRepository setContext(ISugarRepository sugarRepository,bool needNewCopy)
{
if (sugarRepository.Context != null)
{
if (needNewCopy)
{
sugarRepository.Context = sugarRepository.Context.CopyNew();
}
}
else
{
if (needNewCopy)
{
sugarRepository.Context = this.Context.CopyNew();
}
else
{
sugarRepository.Context = this.Context;
}
}
return sugarRepository;
}
private bool IsAssignableToBaseRepository(Type type) private bool IsAssignableToBaseRepository(Type type)
{ {
var baseInterfaces = type.GetInterfaces(); var baseInterfaces = type.GetInterfaces();
@ -169,6 +189,11 @@ namespace SqlSugar
} }
return result; return result;
} }
public RepositoryType ChangeRepository<RepositoryType>(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository
{
var instance = handleDependencies(typeof(RepositoryType), serviceProvider, false);
return (RepositoryType)instance;
}
public ISugarQueryable<T> AsQueryable() public ISugarQueryable<T> AsQueryable()
{ {
return Context.Queryable<T>(); return Context.Queryable<T>();