Split table

This commit is contained in:
sunkaixuna
2021-10-30 13:10:23 +08:00
parent 651f7be540
commit bceb7b0cdb
2 changed files with 24 additions and 9 deletions

View File

@@ -22,7 +22,7 @@ namespace SqlSugar
public EntityInfo EntityInfo { get; set; } public EntityInfo EntityInfo { get; set; }
public List<MappingColumn> MappingColumnList { get; set; } public List<MappingColumn> MappingColumnList { get; set; }
private List<string> IgnoreColumnNameList { get; set; } private List<string> IgnoreColumnNameList { get; set; }
private bool IsOffIdentity { get; set; } internal bool IsOffIdentity { get; set; }
public T[] InsertObjs { get; set; } public T[] InsertObjs { get; set; }
public MappingTableList OldMappingTableList { get; set; } public MappingTableList OldMappingTableList { get; set; }
@@ -418,12 +418,12 @@ namespace SqlSugar
result.EntityInfo = this.EntityInfo; result.EntityInfo = this.EntityInfo;
result.Helper = helper; result.Helper = helper;
result.SplitType = splitType; result.SplitType = splitType;
result.TableNames = new List<string>(); result.TableNames = new List<KeyValuePair<string, object>>();
foreach (var item in this.InsertObjs) foreach (var item in this.InsertObjs)
{ {
var splitFieldValue = helper.GetValue(splitType, item); var splitFieldValue = helper.GetValue(splitType, item);
var tableName=helper.GetTableName(splitType, splitFieldValue); var tableName=helper.GetTableName(splitType, splitFieldValue);
result.TableNames.Add(tableName); result.TableNames.Add(new KeyValuePair<string, object>(tableName,item));
} }
result.Inserable = this; result.Inserable = this;
return result; return result;

View File

@@ -6,25 +6,40 @@ using System.Threading.Tasks;
namespace SqlSugar namespace SqlSugar
{ {
public class SplitInsertable<T> public class SplitInsertable<T> where T:class ,new()
{ {
public SqlSugarProvider Context; public SqlSugarProvider Context;
internal SplitTableContext Helper; internal SplitTableContext Helper;
public EntityInfo EntityInfo; public EntityInfo EntityInfo;
public SplitType SplitType; public SplitType SplitType;
internal IInsertable<T> Inserable { get; set; } internal IInsertable<T> Inserable { get; set; }
internal List<string> TableNames { get; set; } internal List<KeyValuePair<string,object>> TableNames { get; set; }
public int ExecuteCommand() public int ExecuteCommand()
{ {
CreateTable(); CreateTable();
if (TableNames.Count == 1) if (TableNames.Count == 1)
{ {
return Inserable.AS(TableNames.First()).ExecuteCommand(); return Inserable.AS(TableNames.First().Key).ExecuteCommand();
} }
else else
{ {
return 0; var result = 0;
var groups = TableNames.GroupBy(it => it.Key).ToList();
var parent = ((InsertableProvider<T>)Inserable);
var names= parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i=>i.Key).ToList();
foreach (var item in groups)
{
var groupInserable =(InsertableProvider<T>) this.Context.Insertable<T>(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) 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<T>(); this.Context.CodeFirst.InitTables<T>();
} }
} }