From f5e42c5fde7c243c3d8c9e6c0686e8f47a3e902d Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 16 Jul 2022 21:21:48 +0800 Subject: [PATCH] Update db.UpdateNav(list) --- .../ExecuteNavProvider/UpdateNavOneToMany.cs | 5 ++++ .../UpdateNavProviderHelper.cs | 26 +++++++------------ 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs index 56019274f..e48133ae5 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs @@ -24,6 +24,7 @@ namespace SqlSugar { parentPkColumn = parentNavColumn; } + var ids = new List(); foreach (var item in parentList) { var parentValue = parentPkColumn.PropertyInfo.GetValue(item); @@ -33,10 +34,14 @@ namespace SqlSugar foreach (var child in childs) { thisFkColumn.PropertyInfo.SetValue(child, parentValue, null); + ids.Add(parentValue); } children.AddRange(childs); } } + this._Context.Deleteable() + .AS(thisEntity.DbTableName) + .In(thisFkColumn.DbColumnName, ids.Distinct().ToList()).ExecuteCommand(); InsertDatas(children, thisPkColumn); SetNewParent(thisEntity, thisPkColumn); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs index 77b902e07..b77a57636 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavProviderHelper.cs @@ -18,7 +18,9 @@ namespace SqlSugar { if (_RootList == null) { - _RootList = _ParentList = GetRootList(_Roots).Cast().ToList(); + this._Context.Updateable(_Roots).ExecuteCommand(); + _RootList = _ParentList = _Roots.Cast().ToList(); + _ParentEntity = this._Context.EntityMaintenance.GetEntityInfo(); } else if (_ParentList == null) { @@ -26,7 +28,6 @@ namespace SqlSugar var pkColumn = this._Context.EntityMaintenance.GetEntityInfo().Columns.FirstOrDefault(it => it.IsPrimarykey); this._ParentPkColumn = pkColumn; } - } private UpdateNavProvider GetResult() where TChild : class, new() @@ -41,18 +42,7 @@ namespace SqlSugar _RootList = this._RootList }; } - - private List GetRootList(List datas) where Type : class, new() - { - List result = new List(); - this._Context.InitMappingInfo(); - var entity = this._Context.EntityMaintenance.GetEntityInfo(); - var pkColumn = entity.Columns.FirstOrDefault(it => it.IsPrimarykey); - InsertDatas(datas, pkColumn); - this._ParentEntity = entity; - result = datas; - return result; - } + private void InsertIdentity(List datas) where Type : class, new() { @@ -80,10 +70,12 @@ namespace SqlSugar { children = children.Distinct().ToList(); var x = this._Context.Storageable(children).WhereColumns(new string[] { pkColumn.PropertyName }).ToStorage(); - var UpdateData = children = x.UpdateList.Select(it => it.Item).ToList(); + var insertData = x.InsertList.Select(it => it.Item).ToList(); + var updateData = x.UpdateList.Select(it => it.Item).ToList(); Check.ExceptionEasy(pkColumn == null && NavColumn == null, $"The entity is invalid", $"实体错误无法使用导航"); - InitData(pkColumn, UpdateData); - this._ParentList = children.Cast().ToList(); + x.AsUpdateable.ExecuteCommand(); + InitData(pkColumn, insertData); + this._ParentList = insertData.Union(updateData).Cast().ToList(); } private void InitData(EntityColumnInfo pkColumn, List UpdateData) where TChild : class, new()