mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-07 18:04:55 +08:00
Split table
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user