一、分表测试
程序
using SqlSugar;
var db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = "Server=127.0.0.1;Database=test;User ID=sa;Password=123456;Trusted_Connection=False;TrustServerCertificate=True;",
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
});
//创建表
db.CodeFirst.InitTables(typeof(SysUser));
//插入
for (int i = 0; i < 10; i++)
{
var newUser = new SysUser
{
Id = SnowFlakeSingle.instance.NextId(),
Name = "John Doe",
};
db.Insertable(newUser).SplitTable().ExecuteCommand();
}
//读取
var users = db.Queryable<SysUser>().SplitTable(tabs => tabs.Take(3)).ToList();
//
var i = db.MasterQueryable<SysUser>().Where(it => it.Name == "John Doe").SplitTable(tabs => tabs.Take(2)).Select(s => SqlFunc.AggregateDistinctCount(s.Id)).First();
测试表类
using SqlSugar;
[SplitTable(SplitType.Day)]//指定按照时间分表
[SugarTable("UserSplit{year}{month}{day}")]
public class SysUser
{
/// <summary>
/// 主键
///</summary>
[Newtonsoft.Json.JsonConverter(typeof(ValueToStringConverter))]
[SugarColumn(ColumnName="id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
/// 卡号
///</summary>
[SugarColumn(ColumnName="cardNo",IsNullable =true)]
public string? CardNo { get; set; }
/// <summary>
/// 用户名
///</summary>
[SugarColumn(ColumnName="userNo" , IsNullable = true)]
public string? UserNo { get; set; }
/// <summary>
/// 用户名
///</summary>
[SugarColumn(ColumnName="name")]
public string? Name { get; set; }
[SplitField] //分表以当前这个属性 对应的数据库表字段数据为维度来分表
public DateTime CreateTime { get; set; } = DateTime.Now;
}
二、联表测试
1、User的主键id和Order的Userid匹配(添加了导航属性)
2、User的实体表格没有Orders这个字段
using Newtonsoft.Json;
using SqlSugar;
var db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = "Server=127.0.0.1;Database=test;User ID=sa;Password=123456;Trusted_Connection=False;TrustServerCertificate=True;",
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
});
var types = new List<Type>();
types.Add(typeof(User));
types.Add(typeof(Order));
db.CodeFirst.InitTables(types.ToArray());
User user1 = new User() {
Id = 1,
Name = "Test"
};
db.Insertable<User>(user1).ExecuteCommand();
Order order = new Order() {
Id = 2,
UserId = 1,
Product = "111",
Price = "123"
};
db.Insertable<Order>(order).ExecuteCommand();
var tab = db.Queryable<User>().Includes(it => it.Orders).ToList();
Console.WriteLine(JsonConvert.SerializeObject(tab));
//输出[{"Id":1,"Name":"Test","Orders":[{"Id":2,"UserId":1,"Product":"111","Price":"123"}]}]
public class User
{
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public int Id { get; set; }
public string Name { get; set; }
[Navigate(NavigateType.OneToMany, nameof(Order.UserId))]//一对多
public List<Order> Orders { get; set; }
}
public class Order
{
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public int Id { get; set; }
public int UserId { get; set; }
public string Product { get; set; }
public string Price { get; set; }
}
三、去重测试
对单字段Name去重
var i = db.MasterQueryable<SysUser>().SplitTable(tabs => tabs.Take(4)).Select(s => s.Name).Distinct().ToList();