Split table

This commit is contained in:
sunkaixuna
2021-10-30 15:12:57 +08:00
parent 35e16bcc61
commit c96f8bd454
4 changed files with 31 additions and 25 deletions

View File

@@ -48,7 +48,7 @@ namespace OrmTest
//按日分表 //按日分表
var x3 = db.Insertable(new OrderSpliteTest() { Name="A" }).SplitTable().ExecuteCommand(); var x3 = db.Insertable(new OrderSpliteTest() { Name="A" }).SplitTable().ExecuteCommand();
////强制分表类型 ////强制分表类型
//var x4 = db.Insertable(new OrderSpliteTest() { Name = "A" }).SplitTable(SplitType.Day).ExecuteCommand(); var x4 = db.Insertable(new OrderSpliteTest() { Name = "A" ,Time=DateTime.Now.AddDays(-1) }).SplitTable().ExecuteCommand();
Console.WriteLine("#### CodeFirst end ####"); Console.WriteLine("#### CodeFirst end ####");
} }

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -431,8 +432,16 @@ namespace SqlSugar
public SplitInsertable<T> SplitTable() public SplitInsertable<T> SplitTable()
{ {
SplitType SplitType = SplitType.Day; var splitTableAttribute = typeof(T).GetCustomAttribute<SplitTableAttribute>();
return SplitTable(SplitType); if (splitTableAttribute != null)
{
return SplitTable((splitTableAttribute as SplitTableAttribute).SplitType);
}
else
{
Check.Exception(true,$" {typeof(T).Name} need SplitTableAttribute");
return null;
}
} }
#endregion #endregion

View File

@@ -18,33 +18,29 @@ namespace SqlSugar
public int ExecuteCommand() public int ExecuteCommand()
{ {
CreateTable(); CreateTable();
if (TableNames.Count == 1) 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)
{ {
return Inserable.AS(TableNames.First().Key).ExecuteCommand(); var list = item.Select(it => it.Value as T).ToList();
} var groupInserable = (InsertableProvider<T>)this.Context.Insertable<T>(list);
else groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString;
{ groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc;
var result = 0; groupInserable.diffModel = parent.diffModel;
var groups = TableNames.GroupBy(it => it.Key).ToList(); groupInserable.IsEnableDiffLogEvent = parent.IsEnableDiffLogEvent;
var parent = ((InsertableProvider<T>)Inserable); groupInserable.InsertBuilder.IsNoInsertNull = parent.InsertBuilder.IsNoInsertNull;
var names= parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i=>i.Key).ToList(); groupInserable.IsOffIdentity = parent.IsOffIdentity;
foreach (var item in groups) result += groupInserable.AS(item.Key).InsertColumns(names.ToArray()).ExecuteCommand();
{
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;
} }
return result;
} }
private void CreateTable() private void CreateTable()
{ {
var isLog = this.Context.Ado.IsEnableLogEvent;
this.Context.Ado.IsEnableLogEvent = false;
foreach (var item in TableNames) foreach (var item in TableNames)
{ {
if (!this.Context.DbMaintenance.IsAnyTable(item.Key, false)) if (!this.Context.DbMaintenance.IsAnyTable(item.Key, false))
@@ -53,6 +49,7 @@ namespace SqlSugar
this.Context.CodeFirst.InitTables<T>(); this.Context.CodeFirst.InitTables<T>();
} }
} }
this.Context.Ado.IsEnableLogEvent = isLog;
this.Context.MappingTables.Add(EntityInfo.EntityName, EntityInfo.DbTableName); this.Context.MappingTables.Add(EntityInfo.EntityName, EntityInfo.DbTableName);
} }
} }

View File

@@ -49,7 +49,7 @@ namespace SqlSugar
} }
public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue) public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue)
{ {
var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.PropertyType.GetCustomAttribute<SplitFieldAttribute>() != null); var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() != null);
if (splitColumn == null) if (splitColumn == null)
{ {
return db.GetDate(); return db.GetDate();