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