diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 7154e8959..65fc04ab7 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -408,7 +408,7 @@ namespace SqlSugar return await this.Context.Queryable().WhereClassByPrimaryKey(data).IncludesAllFirstLayer().FirstAsync(); } } - public async Task ExecuteCommandIdentityIntoEntityAsync() + public virtual async Task ExecuteCommandIdentityIntoEntityAsync() { var result = InsertObjs.First(); var identityKeys = GetIdentityKeys(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index 1c945ee94..1a6cb2c80 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1531,7 +1531,7 @@ namespace SqlSugar //return sql; } - internal JoinQueryInfo GetJoinInfo(Expression joinExpression, JoinType joinType) + public virtual JoinQueryInfo GetJoinInfo(Expression joinExpression, JoinType joinType) { QueryBuilder.CheckExpressionNew(joinExpression, "Join"); QueryBuilder.JoinExpression = joinExpression; diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs index dd7966e2a..c0571cca8 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; +using System.Runtime.CompilerServices; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -392,7 +393,8 @@ namespace SqlSugar TableId = i, UpdateSql = column.UpdateSql, UpdateServerTime = column.UpdateServerTime, - IsPrimarykey=column.IsPrimarykey + IsPrimarykey=column.IsPrimarykey, + DataType=column.DataType }; if (column.ForOwnsOnePropertyInfo != null) { @@ -440,6 +442,8 @@ namespace SqlSugar if (column.ForOwnsOnePropertyInfo != null) { var owsPropertyValue = column.ForOwnsOnePropertyInfo.GetValue(item, null); + if (owsPropertyValue == null) + return null; return column.PropertyInfo.GetValue(owsPropertyValue, null); } else diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 0384e5d7d..5f66b7fe3 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -55,11 +55,10 @@ namespace SqlSugar var item = memberAssignment.Expression; item = ExpressionTool.RemoveConvert(item); //Column IsJson Handler - if (memberAssignment.Member.CustomAttributes != null) - { - var customAttribute = memberAssignment.Member.GetCustomAttribute(); - - if (customAttribute?.IsJson ?? false) + if (entityMaintenance!=null) + { + EntityColumnInfo columnInfo = entityMaintenance.GetEntityInfo(type).Columns.FirstOrDefault(it => it.PropertyName == memberAssignment.Member.Name); + if (columnInfo?.IsJson ?? false) { var paramterValue = ExpressionTool.DynamicInvoke(item); var parameterName = AppendParameter(new SerializeService().SerializeObject(paramterValue)); @@ -72,6 +71,15 @@ namespace SqlSugar continue; } + else if (UtilMethods.IsParameterConverter(columnInfo)) + { + var value = ExpressionTool.DynamicInvoke(item); + var p=UtilMethods.GetParameterConverter(this.Context.ParameterIndex,this.Context.SugarContext.Context, value, memberAssignment.Expression, columnInfo); + this.Context.Result.Append(base.Context.GetEqString(memberName, p.ParameterName)); + this.Context.ParameterIndex++; + this.Context.Parameters.Add(p); + continue; + } } if ((item is MemberExpression) && ((MemberExpression)item).Expression == null) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs index c9deae114..bd3686681 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs @@ -292,6 +292,10 @@ namespace SqlSugar { isubList.RemoveAll(it => it is SubTake); } + if (isJoin == false && isSubSubQuery&&this.context.CurrentShortName==null) + { + this.context.CurrentShortName=ExpressionTool.GetParameters(allMethods.FirstOrDefault()).FirstOrDefault().Name; + } List result = isubList.Select(it => { it.HasWhere = isHasWhere;