mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
Split table
This commit is contained in:
parent
35e16bcc61
commit
c96f8bd454
@ -48,7 +48,7 @@ namespace OrmTest
|
||||
//按日分表
|
||||
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 ####");
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -431,8 +432,16 @@ namespace SqlSugar
|
||||
|
||||
public SplitInsertable<T> SplitTable()
|
||||
{
|
||||
SplitType SplitType = SplitType.Day;
|
||||
return SplitTable(SplitType);
|
||||
var splitTableAttribute = typeof(T).GetCustomAttribute<SplitTableAttribute>();
|
||||
if (splitTableAttribute != null)
|
||||
{
|
||||
return SplitTable((splitTableAttribute as SplitTableAttribute).SplitType);
|
||||
}
|
||||
else
|
||||
{
|
||||
Check.Exception(true,$" {typeof(T).Name} need SplitTableAttribute");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -18,33 +18,29 @@ namespace SqlSugar
|
||||
public int ExecuteCommand()
|
||||
{
|
||||
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();
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
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.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;
|
||||
}
|
||||
|
||||
private void CreateTable()
|
||||
{
|
||||
var isLog = this.Context.Ado.IsEnableLogEvent;
|
||||
this.Context.Ado.IsEnableLogEvent = false;
|
||||
foreach (var item in TableNames)
|
||||
{
|
||||
if (!this.Context.DbMaintenance.IsAnyTable(item.Key, false))
|
||||
@ -53,6 +49,7 @@ namespace SqlSugar
|
||||
this.Context.CodeFirst.InitTables<T>();
|
||||
}
|
||||
}
|
||||
this.Context.Ado.IsEnableLogEvent = isLog;
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return db.GetDate();
|
||||
|
Loading…
Reference in New Issue
Block a user