当我们想通过Redis等进行缓存处理时代如下:
ICacheService myCache =
new
HttpRuntimeCache();
SqlSugarClient db =
new
SqlSugarClient(
new
ConnectionConfig()
{
ConnectionString = Config.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection =
true
,
ConfigureExternalServices =
new
ConfigureExternalServices()
{
DataInfoCacheService = myCache
//配置我们创建的缓存类
}
});
db.Queryable<Student>().Where(it => it.Id > 0).WithCache().ToList();
//设置缓存默认一天
db.Queryable<Student>().WithCache(1000).ToList();
//设置具体过期时间
详细教程: http://www.donet5.com/Home/Doc?typeId=1214
在原有方法后面加Async就是异步方法了
var task1=db.Queryable<Order>().FirstAsync(); var task2 = db.Queryable<Order>().Where(it=>it.Id==1).ToListAsync(); //分页需要特别注意用法 RefAsync<int> total = 0; Db.Queryable<Order>().ToPageListAsync(1, 2, total);
数据库将order生成一段JSON字符串进行存储
public class UnitJsonTest { [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } [SqlSugar.SugarColumn(ColumnDataType ="varchar(2000)", IsJson = true)] public Order Order { get; set; } public string Name{get;set;} } Db.Insertable(new UnitJsonTest() { Name="json1",Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand(); var list = Db.Queryable<UnitJsonTest>().ToList();
当然实体不一定叫tree,Child也不一定叫Child, ParentId也不一定叫Parentid,结构上一样就行
var tree = db.Queryable<Tree>().ToTree(it=>it.Child,it=>it.ParentId,0); //第三个参数为0代表 parent为0是第一级 //实体 public class Tree { [SqlSugar.SugarColumn(IsPrimaryKey =true)] public int Id { get; set; } public string Name { get; set; } public int ParentId { get; set; } [SqlSugar.SugarColumn(IsIgnore = true)] public List<Tree> Child { get; set; } }
当我们使用Select时候有一个字段用到了特殊的C#函数解析不了,我们可以用Mapper单独对这个字段进行处理,
原理:是Select是用来生成Sql,Mapper是对ToList后的结果进行的转换,所以支持任何C#函数
var newClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos( JoinType.Left, o.Id == i.OrderId, JoinType.Left, o.CustomId == c.Id )) .Select((o, i, c) => new ViewOrder { Name =o.Name, CustomName=c.Name, Id=it.Id//暂时不处理 }) .Mapper(it=> { it.Id = Util.GetNo(it.Id) ; //这里处理
Mapper处理匿名对象需要这么写,需要加上(daynamic)
db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos( JoinType.Left, o.Id == i.OrderId, JoinType.Left, o.CustomId == c.Id )) .Select((o, i, c) => (dynamic) new { orderName = o.Name, cusName=c.Name }).Mapper(it=> { it.orderName = "_"+it.orderName; }).ToList();
更多Mapper用法: http://www.donet5.com/Home/Doc?typeId=1188
2016 © donet5.comApache Licence 2.0