From 507c2da8755d5cab1d5fe1aa320bafe209953f79 Mon Sep 17 00:00:00 2001 From: "610262374@qq.com" Date: Sat, 15 Jun 2019 14:30:11 +0800 Subject: [PATCH] Asynchronous correlation processing --- .../Abstract/AdoProvider/AdoProvider.cs | 22 ++++----- .../SugarProvider/SqlSugarAccessory.cs | 2 +- .../SqlSugar/Properties/AssemblyInfo.cs | 4 +- Src/Asp.Net/SqlSugar/SqlSugarClient.cs | 47 +++++++++++++++++-- 4 files changed, 57 insertions(+), 18 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index 2d969e7b4..2bedc5e6f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -391,6 +391,7 @@ namespace SqlSugar { try { + Async(); InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); @@ -422,6 +423,7 @@ namespace SqlSugar { try { + Async(); InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); @@ -452,6 +454,7 @@ namespace SqlSugar { try { + Async(); InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); @@ -482,6 +485,7 @@ namespace SqlSugar } public virtual Task GetDataSetAllAsync(string sql, params SugarParameter[] parameters) { + Async(); //False asynchrony . No Support DataSet return Task.FromResult(GetDataSetAll(sql, parameters)); } @@ -1152,17 +1156,13 @@ namespace SqlSugar #endregion #region Helper - //private static void NextResult(IDataReader dataReader) - //{ - // try - // { - // NextResult(dataReader); - // } - // catch - // { - // // Check.Exception(true, ErrorMessage.GetThrowMessage("Please reduce the number of T. Save Queue Changes queries don't have so many results", "请减少T的数量,SaveQueueChanges 查询没有这么多结果")); - // } - //} + private void Async() + { + if (this.Context.Root != null & this.Context.Root.AsyncId == null) + { + this.Context.Root.AsyncId = Guid.NewGuid(); ; + } + } private static bool NextResult(IDataReader dataReader) { try diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 54eb7ca01..3ebfdc6df 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs @@ -22,7 +22,7 @@ namespace SqlSugar _Context = value; } } - + public SqlSugarClient Root { get; set; } public ConnectionConfig CurrentConnectionConfig { get; set; } public Dictionary TempItems { get { if (_TempItems == null) { _TempItems = new Dictionary(); } return _TempItems; } set { _TempItems = value; } } public bool IsSystemTablesConfig { get { return this.CurrentConnectionConfig.InitKeyType == InitKeyType.SystemTable; } } diff --git a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs index 396792e51..9b0d7cbca 100644 --- a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs +++ b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("5.0.0.7")] -[assembly: AssemblyFileVersion("5.0.0.7")] +[assembly: AssemblyVersion("5.0.0.8")] +[assembly: AssemblyFileVersion("5.0.0.8")] diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index f3c8c75af..68a995321 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -22,6 +22,8 @@ namespace SqlSugar private MappingColumnList _MappingColumns; private IgnoreColumnList _IgnoreColumns; private IgnoreColumnList _IgnoreInsertColumns; + internal Guid? AsyncId { get; set; } + internal bool? IsSingeInstance { get; set; } #endregion @@ -671,16 +673,44 @@ namespace SqlSugar #region Helper private SqlSugarProvider GetContext() { + SqlSugarProvider result = null; if (IsSameThreadAndShard()) - return SameThreadAndShard(); + { + result = SameThreadAndShard(); + } else if (IsNoSameThreadAndShard()) - return NoSameThreadAndShard(); + { + result = NoSameThreadAndShard(); + } else if (IsSynchronization()) - return Synchronization(); + { + result = Synchronization(); + } + else if (IsInstanceAsync()) + { + result = NoSameThreadAsync(); + } + else if (IsAsync()) + { + result = Synchronization(); + } else - return NoSameThread(); + { + IsSingeInstance = true; + result = NoSameThread(); + } + if (result.Root == null) + { + result.Root = this; + } + return result; } + private SqlSugarProvider NoSameThreadAsync() + { + var result = GetCallContext(); + return result; + } private SqlSugarProvider NoSameThread() { if (CallContext.ContextList.Value == null) @@ -761,6 +791,15 @@ namespace SqlSugar } } + private bool IsAsync() + { + return AsyncId != null; + } + + private bool IsInstanceAsync() + { + return IsSingeInstance == true && AsyncId != null; + } private bool IsSynchronization() {