Split table

This commit is contained in:
sunkaixuna 2021-10-30 20:31:18 +08:00
parent 22dc0ff39e
commit b5cff787de
6 changed files with 87 additions and 6 deletions

View File

@ -48,10 +48,16 @@ namespace OrmTest
Console.WriteLine();
var tableName = db.SplitHelper<OrderSpliteTest>().GetTableName(DateTime.Now.AddDays(-1));
var tableName2 = db.SplitHelper(new OrderSpliteTest() { Time=DateTime.Now}).GetTableNames();
var tableName3 = db.SplitHelper(new List<OrderSpliteTest> {
new OrderSpliteTest() { Time = DateTime.Now },
new OrderSpliteTest() { Time = DateTime.Now },
new OrderSpliteTest() { Time = DateTime.Now.AddMonths(-10) }
}).GetTableNames();
var x2 = db.Updateable<OrderSpliteTest>()
.SetColumns(it=>it.Name=="a")
.Where(it => it.Pk == Guid.NewGuid())
.SplitTable(tabs => tabs.InTableNames(tableName))
.SplitTable(tabs => tabs.InTableNames(tableName2))
.ExecuteCommand();
Console.WriteLine();

View File

@ -1133,5 +1133,40 @@ namespace SqlSugar
}
}
#endregion
#region Split table
public SplitTableContext SplitHelper<T>()
{
var result = new SplitTableContext(this.Context)
{
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
};
return result;
}
public SplitTableContextResult<T> SplitHelper<T>(T data)
{
var result = new SplitTableContext(this.Context)
{
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
};
return new SplitTableContextResult<T>()
{
Items = new List<T> { data },
Helper = result
};
}
public SplitTableContextResult<T> SplitHelper<T>(List<T> data)
{
var result = new SplitTableContext(this.Context)
{
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
};
return new SplitTableContextResult<T>()
{
Items = data,
Helper = result
};
}
#endregion
}
}

View File

@ -44,6 +44,8 @@ namespace SqlSugar
#region Other methods
SplitTableContext SplitHelper<T>();
SplitTableContextResult<T> SplitHelper<T>(T data);
SplitTableContextResult<T> SplitHelper<T>(List<T> data);
DateTime GetDate();
//SimpleClient GetSimpleClient();
SimpleClient<T> GetSimpleClient<T>() where T : class, new();

View File

@ -8,6 +8,32 @@ using System.Threading.Tasks;
namespace SqlSugar
{
public class SplitTableContextResult<T>
{
public List<T> Items { get; set; }
public SplitTableContext Helper { get; set; }
public string [] GetTableNames()
{
List<string> result = new List<string>();
var attribute = typeof(T).GetCustomAttribute<SplitTableAttribute>() as SplitTableAttribute;
Check.Exception(attribute == null, $" {typeof(T).Name} need SplitTableAttribute");
foreach (var item in Items)
{
result.Add(Helper.GetTableName(Helper.GetValue(attribute.SplitType,item)));
}
return result.Distinct().ToArray();
}
public string[] GetTableNames(SplitType splitType)
{
List<string> result = new List<string>();;
foreach (var item in Items)
{
result.Add(Helper.GetTableName(Helper.GetValue(splitType, item)));
}
return result.ToArray();
}
}
public class SplitTableContext
{
internal SqlSugarProvider Context { get; set; }

View File

@ -848,11 +848,15 @@ namespace SqlSugar
#region Helper
public SplitTableContext SplitHelper<T>()
{
var result = new SplitTableContext(this.Context)
{
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
};
return result;
return this.Context.SplitHelper<T>();
}
public SplitTableContextResult<T> SplitHelper<T>(T data)
{
return this.Context.SplitHelper(data);
}
public SplitTableContextResult<T> SplitHelper<T>(List<T> dataList)
{
return this.Context.SplitHelper(dataList);
}
private SqlSugarProvider GetContext()
{

View File

@ -600,6 +600,14 @@ namespace SqlSugar
{
return ScopedContext.SplitHelper<T>();
}
public SplitTableContextResult<T> SplitHelper<T>(T data)
{
return ScopedContext.SplitHelper(data);
}
public SplitTableContextResult<T> SplitHelper<T>(List<T> dataList)
{
return ScopedContext.SplitHelper(dataList);
}
public SqlSguarTransaction UseTran()
{
return ScopedContext.UseTran();