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,19 +18,14 @@ namespace SqlSugar
public int ExecuteCommand() public int ExecuteCommand()
{ {
CreateTable(); CreateTable();
if (TableNames.Count == 1)
{
return Inserable.AS(TableNames.First().Key).ExecuteCommand();
}
else
{
var result = 0; var result = 0;
var groups = TableNames.GroupBy(it => it.Key).ToList(); var groups = TableNames.GroupBy(it => it.Key).ToList();
var parent = ((InsertableProvider<T>)Inserable); var parent = ((InsertableProvider<T>)Inserable);
var names = parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i => i.Key).ToList(); var names = parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i => i.Key).ToList();
foreach (var item in groups) foreach (var item in groups)
{ {
var groupInserable =(InsertableProvider<T>) this.Context.Insertable<T>(item.ToList()); var list = item.Select(it => it.Value as T).ToList();
var groupInserable = (InsertableProvider<T>)this.Context.Insertable<T>(list);
groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString; groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString;
groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc; groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc;
groupInserable.diffModel = parent.diffModel; groupInserable.diffModel = parent.diffModel;
@@ -41,10 +36,11 @@ namespace SqlSugar
} }
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();