From 56a27525c0bfa656cc65432f6fa09fdc3deeecae Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 17 Aug 2022 21:07:47 +0800 Subject: [PATCH] Update .net core project --- .../ExecuteNavProvider/UpdateNavOneToMany.cs | 26 +++++++++++++++++++ .../SqlSugar/Entities/DeleteNavOptions.cs | 1 + 2 files changed, 27 insertions(+) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs index 0c97314c5..31e17355c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavOneToMany.cs @@ -39,6 +39,7 @@ namespace SqlSugar } ids.Add(parentValue); } + DeleteMany(thisEntity, ids, thisFkColumn.DbColumnName); this._Context.Deleteable() .AS(thisEntity.DbTableName) .In(thisFkColumn.DbColumnName, ids.Distinct().ToList()).ExecuteCommand(); @@ -48,6 +49,31 @@ namespace SqlSugar SetNewParent(thisEntity, thisPkColumn); } + private void DeleteMany(EntityInfo thisEntity, List ids,string fkName) + { + if (_Options == null||_Options.OneToManyDeleteAll==false) + { + return; + } + var oneToManys = thisEntity.Columns.Where(it => it.Navigat != null && it.Navigat.NavigatType == NavigateType.OneToMany).ToList(); + foreach (var oneToMany in oneToManys) + { + var fkFieldName = oneToMany.Navigat.Name2?? thisEntity.Columns.FirstOrDefault(it=>it.IsPrimarykey).PropertyName; + var fkDbColumnName = thisEntity.Columns.FirstOrDefault(it => it.PropertyName == fkFieldName).DbColumnName; + var fks= this._Context.Queryable() + .AS(thisEntity.DbTableName) + .In(fkName, ids.Distinct().ToList()).Select(fkDbColumnName).ToDataTable().Rows.Cast().Select(x=>x[0]).ToArray(); + + var type = oneToMany.PropertyInfo.PropertyType.GenericTypeArguments[0]; + var entity = this._Context.EntityMaintenance.GetEntityInfo(type); + var id = oneToMany.Navigat.Name; + var column = entity.Columns.FirstOrDefault(it => it.PropertyName == id).DbColumnName; + this._Context.Deleteable() + .AS(entity.DbTableName) + .In(column, fks.Distinct().ToList()).ExecuteCommand(); + } + } + private EntityColumnInfo GetParentPkColumn() { EntityColumnInfo parentPkColumn = _ParentPkColumn; diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/DeleteNavOptions.cs b/Src/Asp.NetCore2/SqlSugar/Entities/DeleteNavOptions.cs index 8335ab6eb..401adc205 100644 --- a/Src/Asp.NetCore2/SqlSugar/Entities/DeleteNavOptions.cs +++ b/Src/Asp.NetCore2/SqlSugar/Entities/DeleteNavOptions.cs @@ -15,6 +15,7 @@ namespace SqlSugar { public bool ManyToManyIsUpdateA { get; set; } public bool ManyToManyIsUpdateB { get; set; } + public bool OneToManyDeleteAll { get; set; } } public class InsertNavOptions