SqlSugar/Src/Asp.Net/SqlServerTest/Demo/DemoN_SplitTable.cs

111 lines
4.5 KiB
C#
Raw Normal View History

2021-10-20 13:59:50 +08:00
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OrmTest
{
public class DemoN_SplitTable
{
public static void Init()
{
Console.WriteLine("");
Console.WriteLine("#### CodeFirst Start ####");
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.SqlServer,
ConnectionString = Config.ConnectionString,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true
});
2021-10-23 20:42:40 +08:00
db.Aop.OnLogExecuted = (s, p) =>
{
Console.WriteLine(s);
2021-11-01 10:19:45 +08:00
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
2021-10-23 20:42:40 +08:00
};
2021-10-25 22:35:18 +08:00
2021-10-26 12:43:49 +08:00
//初始化分表
2021-10-20 13:59:50 +08:00
db.CodeFirst.SplitTables().InitTables<OrderSpliteTest>();
2021-10-24 14:46:30 +08:00
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-26 12:43:49 +08:00
//根据最近3个表进行查询
2021-11-01 10:19:45 +08:00
var list=db.Queryable<OrderSpliteTest>()
.SplitTable(DateTime.Now.Date.AddYears(-1),DateTime.Now)
.ToList();
2021-10-26 12:43:49 +08:00
2022-03-01 10:38:48 +08:00
var first = db.Queryable<OrderSpliteTest>()
.SplitTable(DateTime.MaxValue, DateTime.Now)
.First();//no table
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-26 12:43:49 +08:00
//根据时间选出的表进行查询
2021-10-25 22:35:18 +08:00
var list2 = db.Queryable<OrderSpliteTest>().SplitTable(tabs => tabs.Where(it=> it.Date>=DateTime.Now.AddYears(-2))).ToList();
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-26 12:43:49 +08:00
//删除数据只在最近3张表执行操作
2021-10-24 14:46:30 +08:00
var x = db.Deleteable<OrderSpliteTest>().Where(it=>it.Pk==Guid.NewGuid()).SplitTable(tabs => tabs.Take(3)).ExecuteCommand();
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-25 14:01:19 +08:00
2022-01-05 20:25:14 +08:00
var tableName = db.SplitHelper<OrderSpliteTest>().GetTableName(DateTime.Now.AddDays(-111));
var listNull= db.Queryable<OrderSpliteTest>().SplitTable(ta => ta.InTableNames(tableName)).ToList();
2021-10-30 20:31:18 +08:00
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();
2021-10-25 14:01:19 +08:00
var x2 = db.Updateable<OrderSpliteTest>()
.SetColumns(it=>it.Name=="a")
.Where(it => it.Pk == Guid.NewGuid())
2021-10-30 20:31:18 +08:00
.SplitTable(tabs => tabs.InTableNames(tableName2))
2021-10-25 14:01:19 +08:00
.ExecuteCommand();
2021-10-25 22:35:18 +08:00
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-26 12:43:49 +08:00
//按日分表
2021-10-29 11:44:08 +08:00
var x3 = db.Insertable(new OrderSpliteTest() { Name="A" }).SplitTable().ExecuteCommand();
2021-10-30 16:29:09 +08:00
Console.WriteLine();
2021-10-29 11:44:08 +08:00
////强制分表类型
2021-10-30 15:12:57 +08:00
var x4 = db.Insertable(new OrderSpliteTest() { Name = "A" ,Time=DateTime.Now.AddDays(-1) }).SplitTable().ExecuteCommand();
2021-12-18 14:20:30 +08:00
//分表支持BulkCopy
db.Fastest<OrderSpliteTest>().SplitTable().BulkCopy(new List<OrderSpliteTest> {
new OrderSpliteTest() { Pk=Guid.NewGuid(),Name ="a", Time = DateTime.Now },
new OrderSpliteTest() {Pk=Guid.NewGuid(),Name ="a", Time = DateTime.Now },
new OrderSpliteTest() {Pk=Guid.NewGuid(),Name ="a", Time = DateTime.Now.AddMonths(-10) }
});
2022-04-24 21:00:29 +08:00
var updateList = db.Queryable<OrderSpliteTest>().SplitTable(x1 => x1).Take(10).ToList();
db.Updateable(updateList).IgnoreColumns(it=>it.Name).SplitTable().ExecuteCommand();
2021-12-18 14:20:30 +08:00
2022-04-25 15:59:35 +08:00
db.Deleteable(updateList).SplitTable().ExecuteCommand();
2021-12-18 14:20:30 +08:00
db.Fastest<OrderSpliteTest>().SplitTable().BulkUpdate(db.Queryable<OrderSpliteTest>().SplitTable(it=>it).ToList());
2021-12-18 14:47:45 +08:00
db.Fastest<OrderSpliteTest>().SplitTable().BulkUpdate(db.Queryable<OrderSpliteTest>().SplitTable(it => it).ToList(),new string[] { "pk"},new string[] { "name"});
2021-10-20 13:59:50 +08:00
Console.WriteLine("#### CodeFirst end ####");
}
2021-10-29 11:44:08 +08:00
[SplitTable(SplitType.Day)]
2021-10-24 14:46:30 +08:00
[SqlSugar.SugarTable("Taxxx0101_{year}{month}{day}")]
2021-10-20 13:59:50 +08:00
public class OrderSpliteTest
{
[SugarColumn(IsPrimaryKey =true)]
public Guid Pk{ get; set; }
public string Name { get; set; }
2021-10-25 22:35:18 +08:00
[SugarColumn(IsNullable =true)]
2021-10-29 11:44:08 +08:00
[SplitField]
2021-10-25 22:35:18 +08:00
public DateTime Time { get; set; }
2021-10-20 13:59:50 +08:00
}
}
}