NoSql support

This commit is contained in:
sunkaixuan 2025-06-23 19:16:35 +08:00
parent 00605da0e6
commit 8870fb173c
4 changed files with 31 additions and 4 deletions

View File

@ -214,6 +214,15 @@ namespace SqlSugar
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
var insertBuilder = InstanceFactory.GetInsertBuilder(this.Context?.CurrentConnectionConfig);
if (insertBuilder?.DeserializeObjectFunc != null)
{
if (IDataRecordExtensions.DeserializeObjectFunc == null)
{
IDataRecordExtensions.DeserializeObjectFunc = insertBuilder.DeserializeObjectFunc;
}
jsonMethod =typeof(IDataRecordExtensions).GetMethod("GetDeserializeObject").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
}
generator.Emit(OpCodes.Call, jsonMethod);
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel);
@ -511,5 +520,5 @@ namespace SqlSugar
}
}
#endregion
}
}
}

View File

@ -10,7 +10,17 @@ namespace SqlSugar
public static partial class IDataRecordExtensions
{
#region Common Extensions
#region Common Extensions
public static Func<object, Type, object> DeserializeObjectFunc { get; internal set; }
public static T GetDeserializeObject<T>(this IDataReader dr, int i)
{
var obj = dr.GetValue(i);
if (obj == null)
return default(T);
var value = obj;
return (T)DeserializeObjectFunc(value, typeof(T));
}
public static XElement GetXelement(this IDataRecord dr, int i)
{
var result = XElement.Parse(dr.GetString(i).ToString());

View File

@ -347,8 +347,14 @@ namespace SqlSugar
}
if (column.IsJson && columnInfo.Value != null)
{
if (columnInfo.Value != null)
if (this.InsertBuilder.SerializeObjectFunc != null&& columnInfo.Value != null)
{
columnInfo.Value = this.InsertBuilder.SerializeObjectFunc(columnInfo.Value);
}
else if (columnInfo.Value != null)
{
columnInfo.Value = this.Context.Utilities.SerializeObject(columnInfo.Value);
}
}
//var tranColumn=EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase));
if (column.IsTranscoding && columnInfo.Value.HasValue())

View File

@ -88,6 +88,8 @@ namespace SqlSugar
#region Methods
public virtual Func<object, string> SerializeObjectFunc { get; set; }
public virtual Func<object, Type, object> DeserializeObjectFunc { get; set; }
public virtual void ActionMinDate()
{
if (this.Parameters != null)
@ -393,7 +395,7 @@ namespace SqlSugar
}
return (Type)columnInfo.SqlParameterDbType == UtilConstants.SqlConvertType;
}
#endregion
}
}