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 List<MappingColumn> MappingColumnList { get; set; }
private List<string> 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<string>();
result.TableNames = new List<KeyValuePair<string, object>>();
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<string, object>(tableName,item));
}
result.Inserable = this;
return result;

View File

@@ -6,25 +6,40 @@ using System.Threading.Tasks;
namespace SqlSugar
{
public class SplitInsertable<T>
public class SplitInsertable<T> where T:class ,new()
{
public SqlSugarProvider Context;
internal SplitTableContext Helper;
public EntityInfo EntityInfo;
public SplitType SplitType;
internal IInsertable<T> Inserable { get; set; }
internal List<string> TableNames { get; set; }
internal List<KeyValuePair<string,object>> 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<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)
{
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>();
}
}