using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using static OrmTest._1_CodeFirst; namespace OrmTest { public class Unitasdfays { public static void Init() { var db = NewUnitTest.Db; db.CodeFirst.InitTables(typeof(SqlSugarTestEntity)); db.DbMaintenance.TruncateTable(); SqlSugarTestEntity entity = new SqlSugarTestEntity { Id = 1, BarCode = "1111", PatientName = "小明" }; int affrow = db.Storageable(entity).WhereColumns(it => it.BarCode).SplitTable().ExecuteCommand(); entity.PatientName = "小明1"; entity.Id = 0; var x = db.Storageable(entity).As("SQLSUGARTEST").WhereColumns(it => it.BarCode).ExecuteCommand(); var x2 = db.Updateable(new List() { entity }).AS("SQLSUGARTEST").WhereColumns(it => it.BarCode).ExecuteCommand(); affrow += db.Storageable(entity).WhereColumns(it => it.BarCode).SplitTable().ExecuteCommand(); if (affrow != 2 || x != 1 || x2 != 1) { throw new Exception("unit error"); } db.CodeFirst.InitTables(); db.DbMaintenance.TruncateTable(); var id = db.Insertable(new UserInfo001() { Context = "Context", Email = "dfafa@qq.com", Price = Convert.ToDecimal(1.1), UserName = "NULL", RegistrationDate = DateTime.Now, }).ExecuteReturnIdentity(); //Query //查询 var userInfo = db.Queryable().First(it => it.UserName == "NULL"); var userInfo2 = db.Queryable().First(it => it.UserName == null); if (userInfo == null || userInfo2 != null) { throw new Exception("unit error"); } var groupModel = new List { new GroupByModel { FieldName = ObjectFuncModel.Create("IsNull", "name", "{string}:") } }; var selectModel = new List { new SelectModel { FieldName = ObjectFuncModel.Create("IsNull", "name", "{string}:"), AsName = "name" } , new SelectModel { FieldName = ObjectFuncModel.Create("AggregateSum",ObjectFuncModel.Create("IsNull","id","{int}:0")), AsName = "SL" } }; var dtdjbh =db.Queryable().AS("Order") .GroupBy(groupModel) .Select(selectModel) .ToDataTable(); } } [SqlSugar.SugarTable("SQLSUGARTEST")] [SqlSugar.SplitTable(SplitType._Custom01, typeof(SplitTableService))] public class SqlSugarTestEntity { [SqlSugar.SugarColumn(IsPrimaryKey = true)] public int Id { get; set; } public string BarCode { get; set; } public string PatientName { get; set; } /// /// 操作时间 分表字段 /// [SplitField] public DateTime? ProTime { get; set; } = DateTime.Now; } /// /// 自定义分表集合 /// public class SplitTableService : ISplitTableService { /// /// 获取所有匹配的表 /// /// /// /// /// public List GetAllTables(ISqlSugarClient db, EntityInfo EntityInfo, List tableInfos) { List result = new List(); foreach (var item in tableInfos) { if (item.Name.Contains(EntityInfo.DbTableName)) //if (item.Name.Contains("_2021") || item.Name == EntityInfo.DbTableName ) //区分标识如果不用正则符复杂一些,防止找错表 { SplitTableInfo data = new SplitTableInfo() { TableName = item.Name //要用item.name不要写错了 }; result.Add(data); } } return result.OrderBy(it => it.TableName).ToList();//打断点看一下有没有查出所有分表 } public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue) { var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute() != null); var value = splitColumn.PropertyInfo.GetValue(entityValue, null); return value; } public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo) { return entityInfo.DbTableName; //return entityInfo.DbTableName + "_FirstA"; } public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType type) { return entityInfo.DbTableName;//目前模式少不需要分类(自带的有 日、周、月、季、年等进行区分) } /// /// 根据分表字段进行,查找表名,如果当前年份 /// /// /// /// /// /// public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object fieldValue) { var dbLst = db.DbMaintenance.GetTableInfoList(); var dt = (DateTime)fieldValue; if (dbLst.Any(x => x.Name == $"{entityInfo.DbTableName}_{dt.Year}")) return $"{entityInfo.DbTableName}_{dt.Year}";//根据值按首字母 return entityInfo.DbTableName; } } }