diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs index 8b7513be2..0639dd4e3 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs @@ -93,21 +93,9 @@ namespace SqlSugar private InsertNavProvider _ThenInclude(Expression>> expression) where TChild : class, new() { var name = ExpressionTool.GetMemberName(expression); - if (expression is LambdaExpression lambda) + if (name == null) { - if (lambda.Body is MethodCallExpression method) - { - if (method.Method.Name == "ToList") - { - if (method.Arguments.FirstOrDefault() is { } arg) - { - if (arg is MemberExpression member) - { - name = member.Member.Name; - } - } - } - } + name =ExpressionTool.GetMemberNameByMethod(expression, name); } var isRoot = false; if (this._ParentEntity == null) @@ -137,7 +125,7 @@ namespace SqlSugar InitParentList(); InsertManyToMany(name, nav); } - AddContextInfo(name,isRoot); + AddContextInfo(name, isRoot); return GetResult(); } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs index 448bd0c0d..fdad7ec1c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -137,6 +138,10 @@ namespace SqlSugar } children.AddRange(childs); } + else if (childs == null && parentNavigateProperty.PropertyInfo.GetValue(item) is IList ilist && ilist != null && ilist.Count > 0) + { + childs = GetIChildsBylList(children, thisFkColumn, parentValue, ilist); + } ids.Add(parentValue); if (_Options?.OneToManyNoDeleteNull == true && childs == null) { @@ -194,6 +199,16 @@ namespace SqlSugar _NavigateType = null; SetNewParent(thisEntity, thisPkColumn); } + private static List GetIChildsBylList(List children, EntityColumnInfo thisFkColumn, object parentValue, IList ilist) where TChild : class, new() + { + List childs = ilist.Cast().ToList(); + foreach (var child in childs) + { + thisFkColumn.PropertyInfo.SetValue(child, parentValue, null); + } + children.AddRange(childs); + return childs; + } private static bool ParentIsPk(EntityColumnInfo parentNavigateProperty) { diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProvider.cs index e53829cef..7f55004cf 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProvider.cs @@ -97,6 +97,10 @@ namespace SqlSugar IsFirst = isRoot && this._ParentList == null; InitParentList(); var name = ExpressionTool.GetMemberName(expression); + if (name == null) + { + name = ExpressionTool.GetMemberNameByMethod(expression, name); + } var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name); if (nav.Navigat == null) { diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index 91d4d7158..9a8d20c44 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -10,6 +10,29 @@ namespace SqlSugar { public class ExpressionTool { + + public static string GetMemberNameByMethod(Expression expression, string name) + { + if (expression is LambdaExpression lambda) + { + if (lambda.Body is MethodCallExpression method) + { + if (method.Method.Name == "ToList") + { + if (method.Arguments.FirstOrDefault() is { } arg) + { + if (arg is MemberExpression member) + { + name = member.Member.Name; + } + } + } + } + } + + return name; + } + internal static string ResolveMemberValue(ExpressionContext context, Expression item, string value) { if (item is MemberExpression member) diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec b/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec index 4b3c4c8c5..babca7c16 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec @@ -2,7 +2,7 @@ SqlSugarCore - 5.1.4.188-preview03 + 5.1.4.188-preview09 sunkaixuan 果糖大数据科技 http://www.apache.org/licenses/LICENSE-2.0.html