diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs index e48133ae5..0c97314c5 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs @@ -8,7 +8,7 @@ namespace SqlSugar { public partial class UpdateNavProvider where T : class, new() where Root : class, new() { - + public NavigateType? _NavigateType { get; set; } private void UpdateOneToMany(string name, EntityColumnInfo nav) where TChild : class, new() { List children = new List(); @@ -34,15 +34,17 @@ namespace SqlSugar foreach (var child in childs) { thisFkColumn.PropertyInfo.SetValue(child, parentValue, null); - ids.Add(parentValue); } children.AddRange(childs); } + ids.Add(parentValue); } this._Context.Deleteable() .AS(thisEntity.DbTableName) .In(thisFkColumn.DbColumnName, ids.Distinct().ToList()).ExecuteCommand(); + _NavigateType = NavigateType.OneToMany; InsertDatas(children, thisPkColumn); + _NavigateType = null; SetNewParent(thisEntity, thisPkColumn); } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs index a0c7ab1dc..a7577c3f2 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs @@ -74,7 +74,14 @@ namespace SqlSugar Check.ExceptionEasy(pkColumn == null && NavColumn == null, $"The entity is invalid", $"实体错误无法使用导航"); x.AsUpdateable.ExecuteCommand(); InitData(pkColumn, insertData); - this._ParentList = insertData.Union(updateData).Cast().ToList(); + if (_NavigateType == NavigateType.OneToMany) + { + this._ParentList = children.Cast().ToList(); + } + else + { + this._ParentList = insertData.Union(updateData).Cast().ToList(); + } } private void InitData(EntityColumnInfo pkColumn, List UpdateData) where TChild : class, new() diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpressionN.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpressionN.cs index 14d672dc4..e37281256 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpressionN.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpressionN.cs @@ -68,6 +68,14 @@ namespace SqlSugar queryable.Select($" {ToShortName(lastShortName)}.{queryable.SqlBuilder.GetTranslationColumnName(selectColumnInfo.DbColumnName)}"); var last = subInfos.First(); var FirstPkColumn = last.ThisEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey); + if (last.Nav.Name2.HasValue()) + { + var nav2 = last.ThisEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == last.Nav.Name2); + if (nav2 != null) + { + FirstPkColumn = nav2; + } + } Check.ExceptionEasy(FirstPkColumn == null, $"{ last.ThisEntityInfo.EntityName} need PrimayKey", $"使用导航属性{ last.ThisEntityInfo.EntityName} 缺少主键"); var PkColumn = last.ParentEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == last.Nav.Name); Check.ExceptionEasy(PkColumn == null, $"{ last.ParentEntityInfo.EntityName} no found {last.Nav.Name}", $"{ last.ParentEntityInfo.EntityName} 不存在 {last.Nav.Name}");