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.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i); 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.Call, jsonMethod);
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true)); generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel); generator.MarkLabel(endIfLabel);
@@ -511,5 +520,5 @@ namespace SqlSugar
} }
} }
#endregion #endregion
} }
} }

View File

@@ -10,7 +10,17 @@ namespace SqlSugar
public static partial class IDataRecordExtensions 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) public static XElement GetXelement(this IDataRecord dr, int i)
{ {
var result = XElement.Parse(dr.GetString(i).ToString()); var result = XElement.Parse(dr.GetString(i).ToString());

View File

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

View File

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