diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 4ea3c8cc4..64b98de7a 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -22,7 +22,7 @@ namespace SqlSugar public EntityInfo EntityInfo { get; set; } public List MappingColumnList { get; set; } private List IgnoreColumnNameList { get; set; } - private bool IsOffIdentity { get; set; } + internal bool IsOffIdentity { get; set; } public T[] InsertObjs { get; set; } public MappingTableList OldMappingTableList { get; set; } @@ -418,12 +418,12 @@ namespace SqlSugar result.EntityInfo = this.EntityInfo; result.Helper = helper; result.SplitType = splitType; - result.TableNames = new List(); + result.TableNames = new List>(); foreach (var item in this.InsertObjs) { var splitFieldValue = helper.GetValue(splitType, item); var tableName=helper.GetTableName(splitType, splitFieldValue); - result.TableNames.Add(tableName); + result.TableNames.Add(new KeyValuePair(tableName,item)); } result.Inserable = this; return result; diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs index 8fb33b52a..1004bb975 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs @@ -6,25 +6,40 @@ using System.Threading.Tasks; namespace SqlSugar { - public class SplitInsertable + public class SplitInsertable where T:class ,new() { public SqlSugarProvider Context; internal SplitTableContext Helper; public EntityInfo EntityInfo; public SplitType SplitType; internal IInsertable Inserable { get; set; } - internal List TableNames { get; set; } + internal List> TableNames { get; set; } public int ExecuteCommand() { CreateTable(); if (TableNames.Count == 1) { - return Inserable.AS(TableNames.First()).ExecuteCommand(); + return Inserable.AS(TableNames.First().Key).ExecuteCommand(); } else { - return 0; + var result = 0; + var groups = TableNames.GroupBy(it => it.Key).ToList(); + var parent = ((InsertableProvider)Inserable); + var names= parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i=>i.Key).ToList(); + foreach (var item in groups) + { + var groupInserable =(InsertableProvider) this.Context.Insertable(item.ToList()); + groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString; + groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc; + groupInserable.diffModel = parent.diffModel; + groupInserable.IsEnableDiffLogEvent = parent.IsEnableDiffLogEvent; + groupInserable.InsertBuilder.IsNoInsertNull = parent.InsertBuilder.IsNoInsertNull; + groupInserable.IsOffIdentity = parent.IsOffIdentity; + result += groupInserable.AS(item.Key).InsertColumns(names.ToArray()).ExecuteCommand(); + } + return result; } } @@ -32,9 +47,9 @@ namespace SqlSugar { foreach (var item in TableNames) { - if (!this.Context.DbMaintenance.IsAnyTable(item, false)) + if (!this.Context.DbMaintenance.IsAnyTable(item.Key, false)) { - this.Context.MappingTables.Add(EntityInfo.EntityName, item); + this.Context.MappingTables.Add(EntityInfo.EntityName, item.Key); this.Context.CodeFirst.InitTables(); } }