diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UInsert.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UInsert.cs index 8b38a6d47..991e7f599 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UInsert.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UInsert.cs @@ -52,7 +52,7 @@ namespace OrmTest throw new Exception("Unit Insert"); } List list2 = new List(); - for (int i = 0; i <= 20; i++) + for (int i = 1; i <= 20; i++) { UinitBlukTable data = new UinitBlukTable() { @@ -70,15 +70,18 @@ namespace OrmTest .SplitDelete(it=>it.Item.Id>10) .SplitIgnore(it=>it.Item.Id==2) .SplitError(it => it.Item.Id == 3,"id不能等于3") + .SplitError(it => it.Item.Id == 4, "id不能等于4") + .SplitError(it => it.Item.Id == 5, "id不能等于5") + .WhereColumns(it=>it.Id) .ToStorage(); x.AsDeleteable.ExecuteCommand(); x.AsInsertable.ExecuteCommand(); - x.AsUpdateable.ExecuteCommand(); + x.AsUpdateable.ExecuteCommand(); db.DbMaintenance.TruncateTable(); } public class UinitBlukTable { - [SqlSugar.SugarColumn(IsPrimaryKey =true)] + public int Id { get; set; } public string Name { get; set; } [SqlSugar.SugarColumn(IsNullable =true)] diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index f2c2524f3..374d1e918 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -220,6 +220,15 @@ namespace SqlSugar return this; } + public IDeleteable WhereColumns(Expression> columns) + { + if (columns != null) + { + tempPrimaryKeys = DeleteBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); + } + return this; + } + public IDeleteable RemoveDataCache() { this.RemoveCacheFunc = () => diff --git a/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/IStorageable.cs b/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/IStorageable.cs index 4c7326391..4962649f6 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/IStorageable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/IStorageable.cs @@ -84,7 +84,7 @@ namespace SqlSugar var other = messageList.Where(it => it.StorageType == StorageType.Other).ToList(); StorageableResult result = new StorageableResult() { - AsDeleteable = this.Context.Deleteable(delete.Select(it => it.Item).ToList()), + AsDeleteable = this.Context.Deleteable(), AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()), AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()), OtherList = other, @@ -95,6 +95,12 @@ namespace SqlSugar IgnoreList = ignore, TotalList = messageList }; + if (this.columns != null) + { + result.AsUpdateable.WhereColumns(columns); + result.AsDeleteable.WhereColumns(columns); + } + result.AsDeleteable.Where(delete.Select(it => it.Item).ToList()); return result; } diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 47912e3b4..c611c7c21 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -459,11 +459,16 @@ namespace SqlSugar private void PreToSql() { + UpdateBuilder.PrimaryKeys = GetPrimaryKeys(); if (this.IsWhereColumns) { foreach (var pkName in UpdateBuilder.PrimaryKeys) { + if (WhereColumnList != null&& WhereColumnList.Count()>0) + { + continue; + } var isContains = this.UpdateBuilder.DbColumnInfoList.Select(it => it.DbColumnName.ToLower()).Contains(pkName.ToLower()); Check.Exception(isContains == false, "Use UpdateColumns().WhereColumn() ,UpdateColumns need {0}", pkName); } diff --git a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs index b292d6db8..e50a40e44 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs @@ -29,6 +29,7 @@ namespace SqlSugar IDeleteable Where(string whereString, SugarParameter parameter); IDeleteable Where(string whereString, SugarParameter[] parameters); IDeleteable Where(string whereString, List parameters); + IDeleteable WhereColumns(Expression> columns); IDeleteable EnableDiffLogEvent(object businessData = null); IDeleteable RemoveDataCache(); KeyValuePair> ToSql();