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()) {