mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-26 18:59:17 +08:00
Update unit test
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SqlSugar;
|
||||
@@ -13,17 +14,218 @@ namespace OrmTest
|
||||
|
||||
db.CodeFirst.SplitTables().InitTables<SplitTestTable>();
|
||||
|
||||
db.Queryable<SplitTestTable>().Where(it => it.Name.Contains("a")).SplitTable(tas => tas.Take(3)).ToList();
|
||||
var data = new SplitTestTable()
|
||||
{
|
||||
CreateTime=Convert.ToDateTime("2019-12-1"),
|
||||
Name="jack"
|
||||
};
|
||||
var datas = new List<SplitTestTable>()
|
||||
{
|
||||
new SplitTestTable()
|
||||
{
|
||||
CreateTime=Convert.ToDateTime("2019-12-1"),
|
||||
Name="jack"
|
||||
} ,
|
||||
new SplitTestTable()
|
||||
{
|
||||
CreateTime=Convert.ToDateTime("2022-02-1"),
|
||||
Name="jack"
|
||||
},
|
||||
new SplitTestTable()
|
||||
{
|
||||
CreateTime=Convert.ToDateTime("2020-02-1"),
|
||||
Name="jack"
|
||||
},
|
||||
new SplitTestTable()
|
||||
{
|
||||
CreateTime=Convert.ToDateTime("2021-12-1"),
|
||||
Name="jack"
|
||||
}
|
||||
};
|
||||
|
||||
long id= db.Insertable(data).SplitTable().ExecuteReturnSnowflakeId();
|
||||
|
||||
List<long> ids= db.Insertable(datas).SplitTable().ExecuteReturnSnowflakeIdList();
|
||||
|
||||
var count = 0;
|
||||
db.Queryable<SplitTestTable>().Where(it => it.Name.Contains("a")).SplitTable(tas => tas.Take(3)).ToPageList(1,2,ref count);
|
||||
|
||||
var table2019=Db.SplitHelper<SplitTestTable>().GetTableName("2019-12-1");
|
||||
db.Queryable<SplitTestTable>().Where(it => it.Name.Contains("a")).SplitTable(tas => tas.InTableNames(table2019)).ToList();
|
||||
|
||||
db.Queryable<SplitTestTable>().Where(it => it.Id == 1).SplitTable(tas => tas.Where(y => y.TableName.Contains("2019"))).ToList();
|
||||
|
||||
var deldata = new SplitTestTable()
|
||||
{
|
||||
Id = id,
|
||||
CreateTime = DateTime.Now
|
||||
};
|
||||
var tableName = db.SplitHelper(deldata).GetTableNames();
|
||||
db.Deleteable<SplitTestTable>().Where(deldata).SplitTable(tas=>tas.InTableNames(tableName)).ExecuteCommand();
|
||||
|
||||
|
||||
db.Updateable(deldata).SplitTable(tas=>tas.Take(3)).ExecuteCommand();
|
||||
db.Updateable(deldata).SplitTable(tas => tas.InTableNames(tableName)).ExecuteCommand();
|
||||
|
||||
|
||||
//使用自定义分表
|
||||
db.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService =new WordSplitService();
|
||||
db.Insertable(new WordTestTable()
|
||||
{
|
||||
CreateTime=DateTime.Now,
|
||||
Name="BC"
|
||||
}).SplitTable().ExecuteReturnSnowflakeId();
|
||||
db.Insertable(new WordTestTable()
|
||||
{
|
||||
CreateTime = DateTime.Now,
|
||||
Name = "AC"
|
||||
}).SplitTable().ExecuteReturnSnowflakeId();
|
||||
db.Insertable(new WordTestTable()
|
||||
{
|
||||
CreateTime = DateTime.Now,
|
||||
Name = "ZBZ"
|
||||
}).SplitTable().ExecuteReturnSnowflakeId();
|
||||
|
||||
//只查A表
|
||||
var listall = db.Queryable<WordTestTable>().Where(it => it.Name == "all").SplitTable(tas => tas.ContainsTableNames("_FirstA")).ToList();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[SplitTable(SplitType.Year)]
|
||||
[SugarTable("SplitTestTable_{year}{month}{day}")]
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 随便设置一个分类
|
||||
/// </summary>
|
||||
[SplitTable(SplitType._Custom01)]
|
||||
public class WordTestTable
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey =true)]
|
||||
public long Id { get; set; }
|
||||
|
||||
[SplitField] //标识一下分表字段
|
||||
public string Name { get; set; }
|
||||
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class WordSplitService : ISplitTableService
|
||||
{
|
||||
/// <summary>
|
||||
/// 返回数据用于 tas 进行筛选
|
||||
/// </summary>
|
||||
/// <param name="db"></param>
|
||||
/// <param name="EntityInfo"></param>
|
||||
/// <param name="tableInfos"></param>
|
||||
/// <returns></returns>
|
||||
public List<SplitTableInfo> GetAllTables(ISqlSugarClient db, EntityInfo EntityInfo, List<DbTableInfo> tableInfos)
|
||||
{
|
||||
List<SplitTableInfo> result = new List<SplitTableInfo>();
|
||||
foreach (var item in tableInfos)
|
||||
{
|
||||
if (item.Name.Contains(EntityInfo.DbTableName+"_First")) //区分标识如果不用正则符复杂一些,防止找错表
|
||||
{
|
||||
SplitTableInfo data = new SplitTableInfo()
|
||||
{
|
||||
TableName = item.Name //要用item.name不要写错了
|
||||
};
|
||||
result.Add(data);
|
||||
}
|
||||
}
|
||||
return result.OrderBy(it=>it.TableName).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取分表字段的值
|
||||
/// </summary>
|
||||
/// <param name="db"></param>
|
||||
/// <param name="entityInfo"></param>
|
||||
/// <param name="splitType"></param>
|
||||
/// <param name="entityValue"></param>
|
||||
/// <returns></returns>
|
||||
public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue)
|
||||
{
|
||||
var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() != null);
|
||||
var value = splitColumn.PropertyInfo.GetValue(entityValue, null);
|
||||
return value;
|
||||
}
|
||||
/// <summary>
|
||||
/// 默认表名
|
||||
/// </summary>
|
||||
/// <param name="db"></param>
|
||||
/// <param name="EntityInfo"></param>
|
||||
/// <returns></returns>
|
||||
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo)
|
||||
{
|
||||
return entityInfo.DbTableName + "_FirstA";
|
||||
}
|
||||
|
||||
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType type)
|
||||
{
|
||||
return entityInfo.DbTableName + "_FirstA";//目前模式少不需要分类(自带的有 日、周、月、季、年等进行区分)
|
||||
}
|
||||
|
||||
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object fieldValue)
|
||||
{
|
||||
return entityInfo.DbTableName + "_First" + GetFirstCode(fieldValue+""); //根据值按首字母
|
||||
}
|
||||
|
||||
#region 获取首字母
|
||||
/// <summary>
|
||||
/// 在指定的字符串列表CnStr中检索符合拼音索引字符串
|
||||
/// </summary>
|
||||
/// <param name="CnStr">汉字字符串</param>
|
||||
/// <returns>相对应的汉语拼音首字母串</returns>
|
||||
public static string GetFirstCode(string CnStr)
|
||||
{
|
||||
string Surname = CnStr.Substring(0, 1);
|
||||
string strTemp = GetSpellCode(Surname);
|
||||
return strTemp;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母
|
||||
/// </summary>
|
||||
/// <param name="CnChar">单个汉字</param>
|
||||
/// <returns>单个大写字母</returns>
|
||||
private static string GetSpellCode(string CnChar)
|
||||
{
|
||||
long iCnChar;
|
||||
byte[] arrCN = System.Text.Encoding.Default.GetBytes(CnChar);
|
||||
|
||||
//如果是字母,则直接返回
|
||||
if (arrCN.Length == 1)
|
||||
{
|
||||
CnChar = CnChar.ToUpper();
|
||||
}
|
||||
else
|
||||
{
|
||||
int area = (short)arrCN[0];
|
||||
int pos = (short)arrCN[1];
|
||||
iCnChar = (area << 8) + pos;
|
||||
|
||||
// iCnChar match the constant
|
||||
string letter = "ABCDEFGHJKLMNOPQRSTWXYZ";
|
||||
int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52980, 53689, 54481, 55290 };
|
||||
for (int i = 0; i < 23; i++)
|
||||
{
|
||||
if (areacode[i] <= iCnChar && iCnChar < areacode[i + 1])
|
||||
{
|
||||
CnChar = letter.Substring(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return CnChar;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
[SplitTable(SplitType.Year)]//按年分表
|
||||
[SugarTable("SplitTestTable_{year}{month}{day}")]//生成表名格式 3个变量必须要有
|
||||
public class SplitTestTable
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey =true)]
|
||||
@@ -31,6 +233,6 @@ namespace OrmTest
|
||||
|
||||
public string Name { get; set; }
|
||||
[SplitField]
|
||||
public string CreateTime { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user