diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs
index d6d1fe47e..8e49237c7 100644
--- a/Src/Asp.Net/SqlServerTest/Program.cs
+++ b/Src/Asp.Net/SqlServerTest/Program.cs
@@ -8,7 +8,7 @@ namespace OrmTest
{
static void Main(string[] args)
{
- OldTestMain.Init();
+ //OldTestMain.Init();
//Demo
Demo1_SqlSugarClient.Init();
diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
index 6e483e9d2..721c29b62 100644
--- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
+++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
@@ -140,6 +140,7 @@
+
diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
index c3a64ed36..f085c43eb 100644
--- a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
+++ b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
@@ -1,4 +1,5 @@
-using System;
+using SqlSugar;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -7,9 +8,23 @@ namespace OrmTest
{
public partial class NewUnitTest
{
+ public static SqlSugarClient Db=> new SqlSugarClient(new ConnectionConfig()
+ {
+ DbType = DbType.SqlServer,
+ ConnectionString = Config.ConnectionString,
+ InitKeyType = InitKeyType.Attribute,
+ IsAutoCloseConnection = true,
+ AopEvents = new AopEvents
+ {
+ OnLogExecuting = (sql, p) =>
+ {
+ Console.WriteLine(sql);
+ }
+ }
+ });
public static void Init()
{
-
+ Json();
}
}
}
diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UJson.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UJson.cs
new file mode 100644
index 000000000..8ec8b54c3
--- /dev/null
+++ b/Src/Asp.Net/SqlServerTest/UnitTest/UJson.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OrmTest
+{
+ public partial class NewUnitTest
+ {
+
+ public static void Json()
+ {
+ Db.CodeFirst.InitTables();
+ Db.DbMaintenance.TruncateTable("JsonTest");
+ Db.Insertable(new JsonTest() { Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand();
+ var list = Db.Queryable().ToList();
+ Db.Updateable(new JsonTest() { Id=1,Order = new Order { Id = 2, Name = "order2" } }).ExecuteCommand();
+ var list2 = Db.Queryable().ToList();
+ }
+ }
+
+
+ public class JsonTest
+ {
+ [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+ [SqlSugar.SugarColumn(ColumnDataType = "varchar(max)", IsJson = true)]
+ public Order Order { get; set; }
+ }
+}
diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs
index 3de8b82fb..c5a597881 100644
--- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs
+++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs
@@ -63,6 +63,7 @@ namespace SqlSugar
private static readonly MethodInfo getConvertdatetimeoffsetDate = typeof(IDataRecordExtensions).GetMethod("GetConvertdatetimeoffsetDate");
private static readonly MethodInfo getOtherNull = typeof(IDataRecordExtensions).GetMethod("GetOtherNull");
private static readonly MethodInfo getOther = typeof(IDataRecordExtensions).GetMethod("GetOther");
+ private static readonly MethodInfo getJson = typeof(IDataRecordExtensions).GetMethod("GetJson");
private static readonly MethodInfo getSqliteTypeNull = typeof(IDataRecordExtensions).GetMethod("GetSqliteTypeNull");
private static readonly MethodInfo getSqliteType = typeof(IDataRecordExtensions).GetMethod("GetSqliteType");
private static readonly MethodInfo getEntity = typeof(IDataRecordExtensions).GetMethod("GetEntity", new Type[] { typeof(SqlSugarProvider) });
@@ -140,7 +141,7 @@ namespace SqlSugar
{
if (columnInfo.IsJson)
{
- MethodInfo method = null;
+ MethodInfo jsonMethod = getJson.MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
int i = DataRecord.GetOrdinal(fieldName);
Label endIfLabel = generator.DefineLabel();
generator.Emit(OpCodes.Ldarg_0);
@@ -150,7 +151,7 @@ namespace SqlSugar
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
- generator.Emit(OpCodes.Call, method);
+ generator.Emit(OpCodes.Call, jsonMethod);
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod());
generator.MarkLabel(endIfLabel);
}
diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs
index 75e4e15ef..afe328b4c 100644
--- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs
+++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs
@@ -225,6 +225,15 @@ namespace SqlSugar
return (T)Convert.ChangeType(dr.GetValue(i), typeof(T));
}
+ public static T GetJson(this IDataReader dr, int i)
+ {
+ var obj = dr.GetValue(i);
+ if (obj == null)
+ return default(T);
+ var value = obj.ObjToString();
+ return new SerializeService().DeserializeObject(value);
+ }
+
public static Nullable GetConvertEnum_Null(this IDataReader dr, int i) where T : struct
{
if (dr.IsDBNull(i))
@@ -303,7 +312,7 @@ namespace SqlSugar
{
return (T)Convert.ChangeType((dr.GetString(i)), type);
}
- }
+ }
#endregion
}
}
diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs
index dc76d628f..898a223bd 100644
--- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs
+++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs
@@ -348,6 +348,10 @@ namespace SqlSugar
{
columnInfo.Value = Convert.ToInt64(columnInfo.Value);
}
+ if (column.IsJson&& 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 (tranColumn!=null&&columnInfo.Value.HasValue()) {
columnInfo.Value = UtilMethods.EncodeBase64(columnInfo.Value.ToString());
diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs
index d6d97a2c6..5ae0a7e96 100644
--- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs
+++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs
@@ -455,6 +455,10 @@ namespace SqlSugar
{
columnInfo.Value = Convert.ToInt64(columnInfo.Value);
}
+ if (column.IsJson)
+ {
+ columnInfo.Value = this.Context.Utilities.SerializeObject(columnInfo.Value);
+ }
var tranColumn = EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase));
if (tranColumn != null && columnInfo.Value.HasValue())
{