diff --git a/Src/Asp.Net/MySqlTest/Demos/J_Encode.cs b/Src/Asp.Net/MySqlTest/Demos/J_Encode.cs new file mode 100644 index 000000000..36c0d4a2b --- /dev/null +++ b/Src/Asp.Net/MySqlTest/Demos/J_Encode.cs @@ -0,0 +1,37 @@ +using OrmTest.Demo; +using OrmTest.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest.Demo +{ + public class Encode : DemoBase + { + public static void Init() + { + var db = GetInstance(); + db.Utilities.RemoveCacheAll(); + + + var id=db.Insertable(new List() { + new StudentEncode(){Name="✨✨✨👉🏻2" }, + new StudentEncode(){ Name="✨✨✨👉🏻" } + } ).ExecuteReturnIdentity(); + + var entity = db.Queryable().OrderBy(it=>it.Id,SqlSugar.OrderByType.Desc).ToList(); + entity.First().Name = "✨update✨✨👉🏻"; + db.Updateable(entity.First()).ExecuteCommand(); + entity = db.Queryable().OrderBy(it => it.Id, SqlSugar.OrderByType.Desc).ToList(); + + } + } + [SqlSugar.SugarTable("student")] + public class StudentEncode { + public int Id { get; set; } + [SqlSugar.SugarColumn(IsTranscoding =true)] + public string Name { get; set; } + } +} diff --git a/Src/Asp.Net/MySqlTest/MySqlTest.csproj b/Src/Asp.Net/MySqlTest/MySqlTest.csproj index 0021dd547..521b39ea4 100644 --- a/Src/Asp.Net/MySqlTest/MySqlTest.csproj +++ b/Src/Asp.Net/MySqlTest/MySqlTest.csproj @@ -60,6 +60,7 @@ + diff --git a/Src/Asp.Net/MySqlTest/Program.cs b/Src/Asp.Net/MySqlTest/Program.cs index 572a7e2ce..f51d37fba 100644 --- a/Src/Asp.Net/MySqlTest/Program.cs +++ b/Src/Asp.Net/MySqlTest/Program.cs @@ -46,6 +46,7 @@ namespace OrmTest OrmTest.Demo.CodeFirst.Init();; OrmTest.Demo.MasterSlave.Init(); ; OrmTest.Demo.Queue.Init(); ; + OrmTest.Demo.Encode.Init(); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs b/Src/Asp.Net/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs index ab89467ee..d5507459d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 1661c3c98..0173fa544 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 79d611bdc..ab6f09070 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -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.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 3e30a4607..e3fedef1d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Entities/EntityColumnInfo.cs b/Src/Asp.Net/SqlSugar/Entities/EntityColumnInfo.cs index c35cb9dab..69ceba791 100644 --- a/Src/Asp.Net/SqlSugar/Entities/EntityColumnInfo.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.Net/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index f281c3156..be5fbbc28 100644 --- a/Src/Asp.Net/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 031ccfa85..71784b63c 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/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; + } + } + } }