diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec index c10f9c1c0..04954133a 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec +++ b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec @@ -2,7 +2,7 @@ sqlSugar - 4.9.9.5 + 4.9.9.6 SqlSugar .Net Framework 4.0+ ORM sun kaixuan landa diff --git a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite index a08780130..28f3b7cb2 100644 Binary files a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite and b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite differ diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs index ab89467ee..d5507459d 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs @@ -163,6 +163,7 @@ namespace SqlSugar column.OracleSequenceName = sugarColumn.OracleSequenceName; column.IsOnlyIgnoreInsert = sugarColumn.IsOnlyIgnoreInsert; column.IsEnableUpdateVersionValidation = sugarColumn.IsEnableUpdateVersionValidation; + column.IsTranscoding = sugarColumn.IsTranscoding; } else { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 1661c3c98..0173fa544 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -368,6 +368,10 @@ namespace SqlSugar { columnInfo.Value = Convert.ToInt64(columnInfo.Value); } + var tranColumn=EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase)); + if (tranColumn!=null&&columnInfo.Value.HasValue()) { + columnInfo.Value = UtilMethods.EncodeBase64(columnInfo.Value.ToString()); + } insertItem.Add(columnInfo); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 229940f03..ab6f09070 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1207,7 +1207,7 @@ namespace SqlSugar foreach (var item in list) { var filterResult = item.FilterValue(this.Context); - Where(filterResult.Sql, filterResult.Parameters); + Where(filterResult.Sql+UtilConstants.Space, filterResult.Parameters); } } } @@ -1260,6 +1260,19 @@ namespace SqlSugar protected void _Mapper(List result) { + if (this.EntityInfo.Columns.Any(it => it.IsTranscoding)) + { + foreach (var item in result) + { + foreach (var column in this.EntityInfo.Columns.Where(it => it.IsTranscoding)) + { + var value = column.PropertyInfo.GetValue(item, null); + if (value != null) { + column.PropertyInfo.SetValue(item,UtilMethods.DecodeBase64(value.ToString()),null); + } + } + } + } if (this.Mappers.HasValue()) { foreach (var mapper in this.Mappers) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SaveableProvider/SaveableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SaveableProvider/SaveableProvider.cs index c7e6c3ddf..51b43ea87 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SaveableProvider/SaveableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SaveableProvider/SaveableProvider.cs @@ -131,6 +131,7 @@ namespace SqlSugar public ISaveable EnableDiffLogEvent(object businessData = null) { LoadInsertable(); + LoadUpdateable(); if (this.insertable != null) { this.insertable.EnableDiffLogEvent(businessData); @@ -172,6 +173,15 @@ namespace SqlSugar return this; } + public ISaveable UpdateWhereColumns(Expression> columns) + { + LoadUpdateable(); + if (this.updateable != null) + { + this.updateable.WhereColumns(columns); + } + return this; + } protected virtual List GetPrimaryKeys() { if (this.Context.IsSystemTablesConfig) @@ -196,5 +206,6 @@ namespace SqlSugar updateable = this.Context.Updateable(temp); } + } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index a9d25566b..1a4a31a46 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -285,7 +285,7 @@ namespace SqlSugar foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle())) { var filterResult = item.FilterValue(this.Context); - WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql)); + WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql+UtilConstants.Space)); var filterParamters = this.Context.Ado.GetParameters(filterResult.Parameters); if (filterParamters.HasValue()) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 3e30a4607..e3fedef1d 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -205,6 +205,7 @@ namespace SqlSugar public IUpdateable UpdateColumns(Expression> columns) { + CheckTranscodeing(); var binaryExp = columns.Body as BinaryExpression; Check.Exception(!binaryExp.NodeType.IsIn(ExpressionType.Equal), "No support {0}", columns.ToString()); Check.Exception(!(binaryExp.Left is MemberExpression) && !(binaryExp.Left is UnaryExpression), "No support {0}", columns.ToString()); @@ -250,6 +251,7 @@ namespace SqlSugar } } this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(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(); return this; } @@ -366,6 +368,13 @@ namespace SqlSugar ++i; } } + private void CheckTranscodeing() + { + if (this.EntityInfo.Columns.Any(it => it.IsTranscoding)) + { + Check.Exception(true, ErrorMessage.GetThrowMessage("UpdateColumns no support IsTranscoding", "UpdateColumns方式更新不支持IsTranscoding,你可以使用db.Updateable(实体)的方式更新")); + } + } private void SetUpdateItemByDic(int i, T item, List updateItem) { foreach (var column in item as Dictionary) @@ -403,6 +412,11 @@ namespace SqlSugar { columnInfo.Value = Convert.ToInt64(columnInfo.Value); } + var tranColumn = EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase)); + if (tranColumn != null && columnInfo.Value.HasValue()) + { + columnInfo.Value = UtilMethods.EncodeBase64(columnInfo.Value.ToString()); + } updateItem.Add(columnInfo); } this.UpdateBuilder.DbColumnInfoList.AddRange(updateItem); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs index c35cb9dab..69ceba791 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs @@ -27,5 +27,6 @@ namespace SqlSugar public int DecimalDigits { get; set; } public string OracleSequenceName { get; set; } public bool IsOnlyIgnoreInsert { get; set; } + public bool IsTranscoding { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index f281c3156..be5fbbc28 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs @@ -120,6 +120,14 @@ namespace SqlSugar } + + private bool _IsTranscoding; + public bool IsTranscoding + { + get { return _IsTranscoding; } + set { _IsTranscoding = value; } + } + } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISaveable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISaveable.cs index bedaa7fc7..c071a3b14 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISaveable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISaveable.cs @@ -15,6 +15,7 @@ namespace SqlSugar ISaveable InsertIgnoreColumns(Expression> columns); ISaveable UpdateColumns(Expression> columns); ISaveable UpdateIgnoreColumns(Expression> columns); + ISaveable UpdateWhereColumns(Expression> columns); ISaveable EnableDiffLogEvent(object businessData = null); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj index 1133baa60..887fc08dc 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 4.9.9.5 + 4.9.9.6 sun_kai_xuan https://github.com/sunkaixuan/SqlSugar diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs index 78f469f1a..cbf75be74 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs @@ -788,6 +788,22 @@ namespace SqlSugar } this.Queues.Add(sql,this.Context.Ado.GetParameters(parsmeters)); } + public void AddQueue(string sql, SugarParameter parsmeter) + { + if (Queues == null) + { + Queues = new QueueList(); + } + this.Queues.Add(sql, new List() { parsmeter }); + } + public void AddQueue(string sql, List parsmeters) + { + if (Queues == null) + { + Queues = new QueueList(); + } + this.Queues.Add(sql, parsmeters); + } public QueueList Queues = new QueueList(); private T SaveQueuesProvider(bool isTran, Func, T> func) @@ -812,14 +828,17 @@ namespace SqlSugar if (item.Parameters == null) item.Parameters = new SugarParameter[] { }; var itemParsmeters = item.Parameters.OrderByDescending(it => it.ParameterName.Length).ToList(); + List addParameters = new List(); var itemSql = item.Sql; foreach (var itemParameter in itemParsmeters) { var newName = itemParameter.ParameterName + "_q_" + index; + SugarParameter parameter = new SugarParameter(newName, itemParameter.Value); + parameter.DbType = itemParameter.DbType; itemSql = itemSql.Replace(itemParameter.ParameterName, newName); - itemParameter.ParameterName = newName; + addParameters.Add(parameter); } - parsmeters.AddRange(itemParsmeters); + parsmeters.AddRange(addParameters); itemSql = itemSql.TrimEnd(';')+";"; sqlBuilder.AppendLine(itemSql); index++; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs index 031ccfa85..71784b63c 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs @@ -130,5 +130,44 @@ namespace SqlSugar return byte2String; } + public static string EncodeBase64(string code) + { + if (code.IsNullOrEmpty()) return code; + string encode = ""; + byte[] bytes = Encoding.GetEncoding("utf-8").GetBytes(code); + try + { + encode = Convert.ToBase64String(bytes); + } + catch + { + encode = code; + } + return encode; + } + + public static string DecodeBase64(string code) + { + try + { + if (code.IsNullOrEmpty()) return code; + string decode = ""; + byte[] bytes = Convert.FromBase64String(code); + try + { + decode = Encoding.GetEncoding("utf-8").GetString(bytes); + } + catch + { + decode = code; + } + return decode; + } + catch + { + return code; + } + } + } }