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
@ -45,7 +45,7 @@ namespace SqlSugar
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Global variable
|
#region Global variable
|
||||||
public SqlSugarProvider Context { get => GetContext();}
|
public SqlSugarProvider Context { get => GetContext(); }
|
||||||
public bool IsSystemTablesConfig => this.Context.IsSystemTablesConfig;
|
public bool IsSystemTablesConfig => this.Context.IsSystemTablesConfig;
|
||||||
public ConnectionConfig CurrentConnectionConfig { get => _CurrentConnectionConfig; set => _CurrentConnectionConfig = value; }
|
public ConnectionConfig CurrentConnectionConfig { get => _CurrentConnectionConfig; set => _CurrentConnectionConfig = value; }
|
||||||
public Guid ContextID { get => this.Context.ContextID; set => this.Context.ContextID = value; }
|
public Guid ContextID { get => this.Context.ContextID; set => this.Context.ContextID = value; }
|
||||||
@ -671,31 +671,37 @@ namespace SqlSugar
|
|||||||
#region Helper
|
#region Helper
|
||||||
private SqlSugarProvider GetContext()
|
private SqlSugarProvider GetContext()
|
||||||
{
|
{
|
||||||
if (IsOnleySharedSameThread())
|
if (IsSameThreadAndShard())
|
||||||
return SharedSameThread();
|
return SameThreadAndShard();
|
||||||
else if (IsSingleAndSharedThread())
|
else if (IsNoSameThreadAndShard())
|
||||||
return SingleAndSharedThread();
|
return NoSameThreadAndShard();
|
||||||
else if (IsSynchronization())
|
else if (IsSynchronization())
|
||||||
return Synchronization();
|
return Synchronization();
|
||||||
else
|
else
|
||||||
return Single();
|
return NoSameThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqlSugarProvider Single()
|
private SqlSugarProvider NoSameThread()
|
||||||
{
|
{
|
||||||
if (CallContext.ContextList.Value == null)
|
if (CallContext.ContextList.Value == null)
|
||||||
{
|
|
||||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
|
||||||
}
|
|
||||||
if (CallContext.ContextList.Value.IsNullOrEmpty() || GetCallContext() == null)
|
|
||||||
{
|
{
|
||||||
var context = CopyClient();
|
var context = CopyClient();
|
||||||
CallContext.ContextList.Value.Add(context);
|
AddCallContext(context);
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
else
|
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;
|
return _Context;
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqlSugarProvider SingleAndSharedThread()
|
private SqlSugarProvider NoSameThreadAndShard()
|
||||||
{
|
{
|
||||||
SqlSugarProvider result = _Context;
|
|
||||||
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
||||||
{
|
{
|
||||||
|
var copy = CopyClient();
|
||||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
AddCallContext(copy);
|
||||||
CallContext.ContextList.Value.Add(_Context);
|
return copy;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SqlSugarProvider cacheContext = GetCallContext();
|
var result = GetCallContext();
|
||||||
if (cacheContext != null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
result = cacheContext;
|
var copy = CopyClient();
|
||||||
|
AddCallContext(copy);
|
||||||
|
return copy;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = CopyClient();
|
return result;
|
||||||
CallContext.ContextList.Value.Add(result);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqlSugarProvider SharedSameThread()
|
private SqlSugarProvider SameThreadAndShard()
|
||||||
{
|
{
|
||||||
SqlSugarProvider result = _Context;
|
|
||||||
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
if (CallContext.ContextList.Value.IsNullOrEmpty())
|
||||||
{
|
{
|
||||||
|
AddCallContext(_Context);
|
||||||
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
return _Context;
|
||||||
CallContext.ContextList.Value.Add(_Context);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SqlSugarProvider cacheContext = GetCallContext();
|
var result = GetCallContext();
|
||||||
if (cacheContext != null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
result = cacheContext;
|
var copy = CopyClient();
|
||||||
|
AddCallContext(copy);
|
||||||
|
return copy;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = CopyClient();
|
return result;
|
||||||
CallContext.ContextList.Value.Add(result);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private bool IsSynchronization()
|
private bool IsSynchronization()
|
||||||
{
|
{
|
||||||
return _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
return _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsSingleAndSharedThread()
|
private bool IsNoSameThreadAndShard()
|
||||||
{
|
{
|
||||||
return CurrentConnectionConfig.IsShardSameThread && _ThreadId != Thread.CurrentThread.ManagedThreadId.ToString();
|
return CurrentConnectionConfig.IsShardSameThread && _ThreadId != Thread.CurrentThread.ManagedThreadId.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsOnleySharedSameThread()
|
private bool IsSameThreadAndShard()
|
||||||
{
|
{
|
||||||
return CurrentConnectionConfig.IsShardSameThread && _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
return CurrentConnectionConfig.IsShardSameThread && _ThreadId == Thread.CurrentThread.ManagedThreadId.ToString();
|
||||||
}
|
}
|
||||||
@ -783,6 +787,11 @@ namespace SqlSugar
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
private void AddCallContext(SqlSugarProvider context)
|
||||||
|
{
|
||||||
|
CallContext.ContextList.Value = new List<SqlSugarProvider>();
|
||||||
|
CallContext.ContextList.Value.Add(context);
|
||||||
|
}
|
||||||
|
|
||||||
private SqlSugarProvider GetCallContext()
|
private SqlSugarProvider GetCallContext()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user