This commit is contained in:
sunkaixuan 2019-05-20 08:49:31 +08:00
parent 0abc60ec2b
commit 411431e167

View File

@ -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()
{