From e66bbe06537e9be3bea3d5222919aa378b0572ed Mon Sep 17 00:00:00 2001 From: "610262374@qq.com" Date: Tue, 18 Jun 2019 20:40:36 +0800 Subject: [PATCH] Update Core --- .../Abstract/AdoProvider/AdoProvider.cs | 22 ++++----- .../Abstract/DbBindProvider/DbBindProvider.cs | 8 ++-- .../SugarProvider/SqlSugarAccessory.cs | 2 +- .../UpdateProvider/UpdateableProvider.cs | 15 +++++- .../ExpressionsToSql/Common/ExpressionTool.cs | 9 +++- .../MemberInitExpressionResolve.cs | 1 + .../SqlSeverTest/SqlSugar/SqlSugarClient.cs | 47 +++++++++++++++++-- .../SqlSugar/SqlSugarForCore.nuspec | 2 +- 8 files changed, 83 insertions(+), 23 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index 2d969e7b4..2bedc5e6f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/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.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs index c22faf3db..daa55f806 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs @@ -184,7 +184,7 @@ namespace SqlSugar { using (dataReader) { - if (type.Name.Contains("KeyValuePair")) + if (type.Name.StartsWith("KeyValuePair")) { return GetKeyValueList(type, dataReader); } @@ -206,7 +206,7 @@ namespace SqlSugar { using (dataReader) { - if (type.Name.Contains("KeyValuePair")) + if (type.Name.StartsWith("KeyValuePair")) { return await GetKeyValueListAsync(type, dataReader); } @@ -226,7 +226,7 @@ namespace SqlSugar } public virtual List DataReaderToListNoUsing(Type type, IDataReader dataReader) { - if (type.Name.Contains("KeyValuePair")) + if (type.Name.StartsWith("KeyValuePair")) { return GetKeyValueList(type, dataReader); } @@ -245,7 +245,7 @@ namespace SqlSugar } public virtual Task> DataReaderToListNoUsingAsync(Type type, IDataReader dataReader) { - if (type.Name.Contains("KeyValuePair")) + if (type.Name.StartsWith("KeyValuePair")) { return GetKeyValueListAsync(type, dataReader); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 54eb7ca01..3ebfdc6df 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/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.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index abe3438a3..cc7d8257f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -33,6 +33,7 @@ namespace SqlSugar public bool IsEnableDiffLogEvent { get; set; } public DiffLogModel diffModel { get; set; } private Action RemoveCacheFunc { get; set; } + private int SetColumnsIndex { get; set; } #endregion #region Core @@ -230,6 +231,7 @@ namespace SqlSugar } this.UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull==false&&IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); CheckTranscodeing(); + AppendSets(); return this; } @@ -244,10 +246,10 @@ namespace SqlSugar string key = SqlBuilder.GetNoTranslationColumnName(expResult); UpdateBuilder.SetValues.Add(new KeyValuePair(SqlBuilder.GetTranslationColumnName(key), expResult)); this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); + AppendSets(); return this; } - public IUpdateable UpdateColumnsIF(bool isUpdateColumns, Expression> columns) { if (isUpdateColumns) @@ -372,6 +374,17 @@ namespace SqlSugar #endregion #region Helper + private void AppendSets() + { + if (SetColumnsIndex > 0) + { + var keys = UpdateBuilder.SetValues.Select(it => SqlBuilder.GetNoTranslationColumnName(it.Key.ToLower())).ToList(); + var addKeys = keys.Where(k => !this.UpdateBuilder.DbColumnInfoList.Any(it => it.PropertyName.ToLower() == k || it.DbColumnName.ToLower() == k)).ToList(); + var addItems = this.EntityInfo.Columns.Where(it =>!GetPrimaryKeys().Any(p=>p.ToLower()==it.PropertyName?.ToLower()|| p.ToLower() == it.DbColumnName?.ToLower()) && addKeys.Any(k => it.PropertyName?.ToLower() == k || it.DbColumnName?.ToLower() == k)).ToList(); + this.UpdateBuilder.DbColumnInfoList.AddRange(addItems.Select(it => new DbColumnInfo() { PropertyName = it.PropertyName, DbColumnName = it.DbColumnName })); + } + SetColumnsIndex++; + } private string _ExecuteCommand() { PreToSql(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index b13165c84..50fbe4123 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -96,7 +96,14 @@ namespace SqlSugar var isField = memberExpr.Member.MemberType == MemberTypes.Field; if (isProperty) { - reval = GetPropertyValue(memberExpr); + try + { + reval = GetPropertyValue(memberExpr); + } + catch + { + reval = null; + } } else if (isField) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 41ded7e7a..241aa90ea 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -109,6 +109,7 @@ namespace SqlSugar } else if (IsConst(item)&&IsConvert(item)&&UtilMethods.IsNullable(item.Type) && UtilMethods.GetUnderType(item.Type)==UtilConstants.BoolType) { + item = (item as UnaryExpression).Operand; parameter.Context.Result.Append(base.Context.GetEqString(memberName, GetNewExpressionValue(item))); } else if (IsConst(item)) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs index f3c8c75af..ea9205d55 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/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? IsSingleInstance { 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 (IsSingleInstanceAsync()) + { + result = NoSameThreadAsync(); + } + else if (IsAsync()) + { + result = Synchronization(); + } else - return NoSameThread(); + { + IsSingleInstance = 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 IsSingleInstanceAsync() + { + return IsSingleInstance == true && AsyncId != null; + } private bool IsSynchronization() { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec index e513fa5a9..4f86e7db1 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec @@ -2,7 +2,7 @@ sqlSugarCore - 5.0.0.7 + 5.0.0.8 sunkaixuan Landa http://www.apache.org/licenses/LICENSE-2.0.html