Support string transcoding

This commit is contained in:
sunkaixuan 2019-04-10 07:32:54 +08:00
parent 262a4be1d1
commit 61a9005c16
10 changed files with 119 additions and 0 deletions

View File

@ -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<StudentEncode>() {
new StudentEncode(){Name="✨✨✨👉🏻2" },
new StudentEncode(){ Name="✨✨✨👉🏻" }
} ).ExecuteReturnIdentity();
var entity = db.Queryable<StudentEncode>().OrderBy(it=>it.Id,SqlSugar.OrderByType.Desc).ToList();
entity.First().Name = "✨update✨✨👉🏻";
db.Updateable(entity.First()).ExecuteCommand();
entity = db.Queryable<StudentEncode>().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; }
}
}

View File

@ -60,6 +60,7 @@
<Compile Include="Demos\A_MasterSlave.cs" />
<Compile Include="Demos\DemoBase.cs" />
<Compile Include="Demos\H_Queue.cs" />
<Compile Include="Demos\J_Encode.cs" />
<Compile Include="Models\DataTestInfo.cs" />
<Compile Include="Models\DataTestInfo2.cs" />
<Compile Include="Models\Enum.cs" />

View File

@ -46,6 +46,7 @@ namespace OrmTest
OrmTest.Demo.CodeFirst.Init();;
OrmTest.Demo.MasterSlave.Init(); ;
OrmTest.Demo.Queue.Init(); ;
OrmTest.Demo.Encode.Init();
}
}
}

View File

@ -163,6 +163,7 @@ namespace SqlSugar
column.OracleSequenceName = sugarColumn.OracleSequenceName;
column.IsOnlyIgnoreInsert = sugarColumn.IsOnlyIgnoreInsert;
column.IsEnableUpdateVersionValidation = sugarColumn.IsEnableUpdateVersionValidation;
column.IsTranscoding = sugarColumn.IsTranscoding;
}
else
{

View File

@ -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);
}
}

View File

@ -1260,6 +1260,19 @@ namespace SqlSugar
protected void _Mapper<TResult>(List<TResult> 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)

View File

@ -205,6 +205,7 @@ namespace SqlSugar
public IUpdateable<T> UpdateColumns(Expression<Func<T, bool>> 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<DbColumnInfo> updateItem)
{
foreach (var column in item as Dictionary<string, object>)
@ -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);

View File

@ -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; }
}
}

View File

@ -120,6 +120,14 @@ namespace SqlSugar
}
private bool _IsTranscoding;
public bool IsTranscoding
{
get { return _IsTranscoding; }
set { _IsTranscoding = value; }
}
}
}

View File

@ -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;
}
}
}
}