mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
-
This commit is contained in:
parent
0abc60ec2b
commit
411431e167
@ -671,31 +671,37 @@ namespace SqlSugar
|
||||
#region Helper
|
||||
private SqlSugarProvider GetContext()
|
||||
{
|
||||
if (IsOnleySharedSameThread())
|
||||
return SharedSameThread();
|
||||
else if (IsSingleAndSharedThread())
|
||||
return SingleAndSharedThread();
|
||||
if (IsSameThreadAndShard())
|
||||
return SameThreadAndShard();
|
||||
else if (IsNoSameThreadAndShard())
|
||||
return NoSameThreadAndShard();
|
||||
else if (IsSynchronization())
|
||||
return Synchronization();
|
||||
else
|
||||
return Single();
|
||||
return NoSameThread();
|
||||
}
|
||||
|
||||
private SqlSugarProvider Single()
|
||||
private SqlSugarProvider NoSameThread()
|
||||
{
|
||||
if (CallContext.ContextList.Value == null)
|
||||
{
|
||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
||||
}
|
||||
if (CallContext.ContextList.Value.IsNullOrEmpty() || GetCallContext() == null)
|
||||
{
|
||||
var context = CopyClient();
|
||||
CallContext.ContextList.Value.Add(context);
|
||||
AddCallContext(context);
|
||||
return context;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetCallContext();
|
||||
var result = GetCallContext();
|
||||
if (result == null)
|
||||
{
|
||||
var copy = CopyClient();
|
||||
AddCallContext(copy);
|
||||
return copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -708,67 +714,65 @@ namespace SqlSugar
|
||||
return _Context;
|
||||
}
|
||||
|
||||
private SqlSugarProvider SingleAndSharedThread()
|
||||
private SqlSugarProvider NoSameThreadAndShard()
|
||||
{
|
||||
SqlSugarProvider result = _Context;
|
||||
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
||||
{
|
||||
|
||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
||||
CallContext.ContextList.Value.Add(_Context);
|
||||
var copy = CopyClient();
|
||||
AddCallContext(copy);
|
||||
return copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
SqlSugarProvider cacheContext = GetCallContext();
|
||||
if (cacheContext != null)
|
||||
var result = GetCallContext();
|
||||
if (result == null)
|
||||
{
|
||||
result = cacheContext;
|
||||
var copy = CopyClient();
|
||||
AddCallContext(copy);
|
||||
return copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CopyClient();
|
||||
CallContext.ContextList.Value.Add(result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private SqlSugarProvider SharedSameThread()
|
||||
private SqlSugarProvider SameThreadAndShard()
|
||||
{
|
||||
SqlSugarProvider result = _Context;
|
||||
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
||||
{
|
||||
|
||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
||||
CallContext.ContextList.Value.Add(_Context);
|
||||
AddCallContext(_Context);
|
||||
return _Context;
|
||||
}
|
||||
else
|
||||
{
|
||||
SqlSugarProvider cacheContext = GetCallContext();
|
||||
if (cacheContext != null)
|
||||
var result = GetCallContext();
|
||||
if (result == null)
|
||||
{
|
||||
result = cacheContext;
|
||||
var copy = CopyClient();
|
||||
AddCallContext(copy);
|
||||
return copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CopyClient();
|
||||
CallContext.ContextList.Value.Add(result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool IsSynchronization()
|
||||
{
|
||||
return _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
||||
}
|
||||
|
||||
private bool IsSingleAndSharedThread()
|
||||
private bool IsNoSameThreadAndShard()
|
||||
{
|
||||
return CurrentConnectionConfig.IsShardSameThread && _ThreadId != Thread.CurrentThread.ManagedThreadId.ToString();
|
||||
}
|
||||
|
||||
private bool IsOnleySharedSameThread()
|
||||
private bool IsSameThreadAndShard()
|
||||
{
|
||||
return CurrentConnectionConfig.IsShardSameThread && _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
||||
}
|
||||
@ -783,6 +787,11 @@ namespace SqlSugar
|
||||
|
||||
return result;
|
||||
}
|
||||
private void AddCallContext(SqlSugarProvider context)
|
||||
{
|
||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
||||
CallContext.ContextList.Value.Add(context);
|
||||
}
|
||||
|
||||
private SqlSugarProvider GetCallContext()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user