mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-08 18:34:55 +08:00
Split table
This commit is contained in:
@@ -26,11 +26,12 @@ namespace OrmTest
|
|||||||
};
|
};
|
||||||
db.CodeFirst.SplitTables().InitTables<OrderSpliteTest>();
|
db.CodeFirst.SplitTables().InitTables<OrderSpliteTest>();
|
||||||
var list=db.Queryable<OrderSpliteTest>().SplitTable(tabs => tabs.Take(3)).ToList();
|
var list=db.Queryable<OrderSpliteTest>().SplitTable(tabs => tabs.Take(3)).ToList();
|
||||||
|
|
||||||
|
var x = db.Deleteable<OrderSpliteTest>().Where(it=>it.Pk==Guid.NewGuid()).SplitTable(tabs => tabs.Take(3)).ExecuteCommand();
|
||||||
Console.WriteLine("#### CodeFirst end ####");
|
Console.WriteLine("#### CodeFirst end ####");
|
||||||
}
|
}
|
||||||
|
|
||||||
[SqlSugar.SugarTable("Taxxx0101{year}{month}{day}")]
|
[SqlSugar.SugarTable("Taxxx0101_{year}{month}{day}")]
|
||||||
public class OrderSpliteTest
|
public class OrderSpliteTest
|
||||||
{
|
{
|
||||||
[SugarColumn(IsPrimaryKey =true)]
|
[SugarColumn(IsPrimaryKey =true)]
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ namespace SqlSugar
|
|||||||
public SqlSugarProvider Context;
|
public SqlSugarProvider Context;
|
||||||
public void InitTables<T>()
|
public void InitTables<T>()
|
||||||
{
|
{
|
||||||
var oldMapping = this.Context.Utilities.TranslateCopy(this.Context.MappingTables);
|
//var oldMapping = this.Context.Utilities.TranslateCopy(this.Context.MappingTables);
|
||||||
SplitTableHelper helper = new SplitTableHelper()
|
SplitTableHelper helper = new SplitTableHelper()
|
||||||
{
|
{
|
||||||
Context = this.Context,
|
Context = this.Context,
|
||||||
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
|
EntityInfo = this.Context.EntityMaintenance.GetEntityInfo<T>()
|
||||||
};
|
};
|
||||||
var tables = helper.GetTables();
|
var tables = helper.GetTables();
|
||||||
var oldMapingTables = this.Context.MappingTables;
|
//var oldMapingTables = this.Context.MappingTables;
|
||||||
if (tables.Count >0)
|
if (tables.Count >0)
|
||||||
{
|
{
|
||||||
foreach (var item in tables)
|
foreach (var item in tables)
|
||||||
@@ -32,7 +32,7 @@ namespace SqlSugar
|
|||||||
this.Context.MappingTables.Add(helper.EntityInfo.EntityName, helper.GetDefaultTableName());
|
this.Context.MappingTables.Add(helper.EntityInfo.EntityName, helper.GetDefaultTableName());
|
||||||
this.Context.CodeFirst.InitTables(typeof(T));
|
this.Context.CodeFirst.InitTables(typeof(T));
|
||||||
}
|
}
|
||||||
this.Context.MappingTables = oldMapingTables;
|
this.Context.MappingTables.Add(helper.EntityInfo.EntityName, helper.EntityInfo.DbTableName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,6 +258,21 @@ namespace SqlSugar
|
|||||||
this.Where(Regex.Split(sqlable.Key," Where ",RegexOptions.IgnoreCase).Last(), sqlable.Value);
|
this.Where(Regex.Split(sqlable.Key," Where ",RegexOptions.IgnoreCase).Last(), sqlable.Value);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
public SplitTableDeleteProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc)
|
||||||
|
{
|
||||||
|
this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName);
|
||||||
|
SplitTableDeleteProvider<T> result = new SplitTableDeleteProvider<T>();
|
||||||
|
result.Context = this.Context;
|
||||||
|
SplitTableHelper helper = new SplitTableHelper()
|
||||||
|
{
|
||||||
|
Context =(SqlSugarProvider)Context,
|
||||||
|
EntityInfo = this.EntityInfo
|
||||||
|
};
|
||||||
|
var tables = getTableNamesFunc(helper.GetTables());
|
||||||
|
result.Tables = tables;
|
||||||
|
result.deleteobj = this;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
public IDeleteable<T> RemoveDataCache(string likeString)
|
public IDeleteable<T> RemoveDataCache(string likeString)
|
||||||
{
|
{
|
||||||
this.RemoveCacheFunc = () =>
|
this.RemoveCacheFunc = () =>
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SqlSugar
|
||||||
|
{
|
||||||
|
public class SplitTableDeleteProvider<T> where T : class, new()
|
||||||
|
{
|
||||||
|
public ISqlSugarClient Context;
|
||||||
|
public DeleteableProvider<T> deleteobj;
|
||||||
|
|
||||||
|
public IEnumerable<SplitTableInfo> Tables { get; set; }
|
||||||
|
|
||||||
|
public int ExecuteCommand()
|
||||||
|
{
|
||||||
|
var result = 0;
|
||||||
|
var sqlobj = deleteobj.ToSql();
|
||||||
|
|
||||||
|
foreach (var item in Tables)
|
||||||
|
{
|
||||||
|
var newsqlobj = GetSqlObj(sqlobj, item.TableName);
|
||||||
|
result +=this.Context.Ado.ExecuteCommand(newsqlobj.Key, newsqlobj.Value);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<int> ExecuteCommandAsync()
|
||||||
|
{
|
||||||
|
var result = 0;
|
||||||
|
var sqlobj = deleteobj.ToSql();
|
||||||
|
foreach (var item in Tables)
|
||||||
|
{
|
||||||
|
var newsqlobj = GetSqlObj(sqlobj, item.TableName);
|
||||||
|
result +=await this.Context.Ado.ExecuteCommandAsync(newsqlobj.Key, newsqlobj.Value);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private KeyValuePair<string, List<SugarParameter>> GetSqlObj(KeyValuePair<string, List<SugarParameter>> keyValuePair,string asName)
|
||||||
|
{
|
||||||
|
List<SugarParameter> pars = new List<SugarParameter>();
|
||||||
|
string sql = keyValuePair.Key;
|
||||||
|
if (keyValuePair.Value != null)
|
||||||
|
{
|
||||||
|
pars = keyValuePair.Value.Select(it => new SugarParameter(it.ParameterName, it.Value)).ToList();
|
||||||
|
}
|
||||||
|
sql = Regex.Replace(sql, deleteobj.EntityInfo.DbTableName, asName,RegexOptions.IgnoreCase);
|
||||||
|
return new KeyValuePair<string, List<SugarParameter>>(sql,pars);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -841,6 +841,7 @@ namespace SqlSugar
|
|||||||
Context=Context,
|
Context=Context,
|
||||||
EntityInfo=this.EntityInfo
|
EntityInfo=this.EntityInfo
|
||||||
};
|
};
|
||||||
|
this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName);
|
||||||
var tables = getTableNamesFunc(helper.GetTables());
|
var tables = getTableNamesFunc(helper.GetTables());
|
||||||
List<ISugarQueryable<object>> tableQueryables = new List<ISugarQueryable<object>>();
|
List<ISugarQueryable<object>> tableQueryables = new List<ISugarQueryable<object>>();
|
||||||
foreach (var item in tables)
|
foreach (var item in tables)
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace SqlSugar
|
|||||||
IDeleteable<T> RemoveDataCache(string likeString);
|
IDeleteable<T> RemoveDataCache(string likeString);
|
||||||
KeyValuePair<string, List<SugarParameter>> ToSql();
|
KeyValuePair<string, List<SugarParameter>> ToSql();
|
||||||
IDeleteable<T> EnableQueryFilter();
|
IDeleteable<T> EnableQueryFilter();
|
||||||
|
SplitTableDeleteProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc);
|
||||||
void AddQueue();
|
void AddQueue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ namespace SqlSugar
|
|||||||
public List<SplitTableInfo> GetTables()
|
public List<SplitTableInfo> GetTables()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var oldIsEnableLogEvent = this.Context.Ado.IsEnableLogEvent;
|
||||||
|
this.Context.Ado.IsEnableLogEvent = false;
|
||||||
var tableInfos = this.Context.DbMaintenance.GetTableInfoList(false);
|
var tableInfos = this.Context.DbMaintenance.GetTableInfoList(false);
|
||||||
SplitTableHelper.CheckTableName(EntityInfo.DbTableName);
|
SplitTableHelper.CheckTableName(EntityInfo.DbTableName);
|
||||||
var regex = EntityInfo.DbTableName.Replace("{year}", "([0-9]{2,4})").Replace("{day}", "([0-9]{1,2})").Replace("{month}", "([0-9]{1,2})");
|
var regex = EntityInfo.DbTableName.Replace("{year}", "([0-9]{2,4})").Replace("{day}", "([0-9]{1,2})").Replace("{month}", "([0-9]{1,2})");
|
||||||
@@ -31,6 +33,7 @@ namespace SqlSugar
|
|||||||
result.Add(tableInfo);
|
result.Add(tableInfo);
|
||||||
}
|
}
|
||||||
result = result.OrderByDescending(it => it.Date).ToList();
|
result = result.OrderByDescending(it => it.Date).ToList();
|
||||||
|
this.Context.Ado.IsEnableLogEvent = oldIsEnableLogEvent;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,6 +117,7 @@ namespace SqlSugar
|
|||||||
Check.Exception(Regex.Matches(dbTableName, @"\{year\}").Count > 1, ErrorMessage.GetThrowMessage(" There can only be one {year}", " 只能有一个 {year}"));
|
Check.Exception(Regex.Matches(dbTableName, @"\{year\}").Count > 1, ErrorMessage.GetThrowMessage(" There can only be one {year}", " 只能有一个 {year}"));
|
||||||
Check.Exception(Regex.Matches(dbTableName, @"\{month\}").Count > 1, ErrorMessage.GetThrowMessage("There can only be one {month}", "只能有一个 {month} "));
|
Check.Exception(Regex.Matches(dbTableName, @"\{month\}").Count > 1, ErrorMessage.GetThrowMessage("There can only be one {month}", "只能有一个 {month} "));
|
||||||
Check.Exception(Regex.Matches(dbTableName, @"\{day\}").Count > 1, ErrorMessage.GetThrowMessage("There can only be one {day}", "只能有一个{day}"));
|
Check.Exception(Regex.Matches(dbTableName, @"\{day\}").Count > 1, ErrorMessage.GetThrowMessage("There can only be one {day}", "只能有一个{day}"));
|
||||||
|
Check.Exception(Regex.IsMatch(dbTableName, @"\d\{|\}\d"), ErrorMessage.GetThrowMessage(" '{' or '}' can't be numbers nearby", "占位符相令一位不能是数字,比例错误:1{day}2,正确: 1_{day}_2"));
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
<Compile Include="Abstract\DbMaintenanceProvider\Methods.cs" />
|
<Compile Include="Abstract\DbMaintenanceProvider\Methods.cs" />
|
||||||
<Compile Include="Abstract\DbMaintenanceProvider\Properties.cs" />
|
<Compile Include="Abstract\DbMaintenanceProvider\Properties.cs" />
|
||||||
<Compile Include="Abstract\AdoProvider\AdoProvider.cs" />
|
<Compile Include="Abstract\AdoProvider\AdoProvider.cs" />
|
||||||
|
<Compile Include="Abstract\DeleteProvider\SplitTableDeleteProvider.cs" />
|
||||||
<Compile Include="Abstract\EntityMaintenance\EntityMaintenance.cs" />
|
<Compile Include="Abstract\EntityMaintenance\EntityMaintenance.cs" />
|
||||||
<Compile Include="Abstract\ExpressionableProvider\Expressionable.cs" />
|
<Compile Include="Abstract\ExpressionableProvider\Expressionable.cs" />
|
||||||
<Compile Include="Abstract\FilterProvider\FilterProvider.cs" />
|
<Compile Include="Abstract\FilterProvider\FilterProvider.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user