Sunday, April 25, 2021

ORM 创新解放劳动力 -SqlSugar 新功能介绍

介绍

SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper

优点: 简单易用、功能齐全、高性能、轻量级、服务齐全、有专业技术支持一天18小时服务

支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓

 

新功能介绍

最新稳定版本5.0.2.8 ,发布后1个月时间NUGET下载量达到5000的版本,用户使用也相当满意

而在稳定版本的基础上又布了5.0.2.9版本

加入3大新功能

1. 配置查询 

解决了大量字典表和简单就为取一个name 就要写联表的问题,让单表查询解决一切

2.多租户+仓储+自动分配

3.行转列

 

1、配置查询

解决了大量字典表和简单就为取一个name 就要写联表的问题,让单表查询解决一切

字典表我相信大家都全用到,他们可以方便的存储性别、学历、岗位等 一串数据 并进行TypeId进行区分

1.1 创建测试数据

创建一个字典实体

 public class DataDictionary {  public string Code { get; set; }  public string Name { get; set; }  public string Type { get; set; } }

创建字典表并向里面插入测试数据  

var db = GetInstance();   List<DataDictionary> datas = new List<DataDictionary>();   datas.Add(new DataDictionary() { Code="1", Name="男",Type="sex" });   datas.Add(new DataDictionary() { Code = "2", Name = "女", Type = "sex" });   datas.Add(new DataDictionary() { Code = "1", Name = "南通市", Type = "city" });   datas.Add(new DataDictionary() { Code = "2", Name = "苏州市", Type = "city" });   datas.Add(new DataDictionary() { Code = "1", Name = "江苏省", Type = "province" });   datas.Add(new DataDictionary() { Code = "2", Name = "湖南省", Type = "province" });   db.CodeFirst.InitTables<DataDictionary>();   db.Insertable(datas);

在建一个Person表  

 public class Person  {  //数据库字段  [SqlSugar.SugarColumn(IsPrimaryKey =true,IsIdentity =true)]  public int Id { get; set; }  public string Name { get; set; }  public int SexId { get; set; }  public int CityId { get; set; }  public int ProviceId { get; set; }  //非数据库字段  [SqlSugar.SugarColumn(IsIgnore =true)]  public string SexName { get; set; }  [SqlSugar.SugarColumn(IsIgnore = true)]  public string CityName { get; set; }  [SqlSugar.SugarColumn(IsIgnore = true)]  public string ProviceName { get; set; } } 

1.2 传统字典联表实现缺点

如果我们要将Person中的非数据字典查询出来那么我们就需要写有2种实现方式

1.连表或者子查询 (缺点 写起来很浪费时间)

2.将字典存到内存,通过内存赋值 (缺点 字典表超过1000条以上性能很差 ,并且不能排序,或者LIKE)

下面介绍通过SqlSugar的配置查询解决上2面个难题

 

1.3 配置表简化字典联表

配置字典表

 if (!db.ConfigQuery.Any()) {    var types= db.Queryable<DataDictionary>().Select(it => it.Type).Distinct().ToList();    foreach (var type in types)    {     db.ConfigQuery.SetTable<DataDictionary>(it => it.Code, it => it.Name, type, it => it.Type == type);    } }

配置完我们查询就会很方便了

 var res=db.Queryable<Person>().Select(it => new Person() {     Id=it.Id.SelectAll(),     SexName=it.SexId.GetConfigValue<DataDictionary>("sex"),     ProviceName = it.SexId.GetConfigValue<DataDictionary>("province"),     CityName = it.SexId.GetConfigValue<DataDictionary>("city"), }).ToList();//也支持支持写在Where或者Orderby 

1.4 简单联表查询也可以配置

 db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//配置Order
var list3 = db.Queryable<OrderItem>().Select(it => new OrderItem { ItemId = it.ItemId.SelectAll(), OrderName = it.OrderId.GetConfigValue<Order>() //查询的时候直接用 }).ToList();

 总结:配置表查询的方式可以大大降低重复联表问题,并且配置好后基本就不要写JOIN了 

  

2、多租户+仓储+自动分配

SqlSugar多租户是通过ConfigId进行识别连接哪个库,新版本添加了实体配置ConfigId

  [TenantAttribute("1")]  public class C1Table   {   public string Id { get; set; }  }  [TenantAttribute("2")]  public class C2Table  {   public string Id { get; set; }  }

  

下面我们仓储就可以通过实体配置自动识别是连接哪个库   

 public class Repository<T> : SimpleClient<T> where T : class, new()  {   public Repository(ISqlSugarClient context = null) : base(context)//注意这里要有默认值等于null   {    if (context == null)    {     var db = new SqlSugarClient(new List<ConnectionConfig> {              new ConnectionConfig()             {              ConfigId="1",              DbType = SqlSugar.DbType.SqlServer,              IsAutoCloseConnection = true,              ConnectionString = Config.ConnectionString             },              new ConnectionConfig()             {              ConfigId="2",              DbType = SqlSugar.DbType.SqlServer,              IsAutoCloseConnection = true,              ConnectionString = Config.ConnectionString2             }     });     base.Context = db;     var configId = typeof(T).GetCustomAttribute<TenantAttribute>().configId;     db.ChangeDatabase(configId);    }   }   /// <summary>   /// 扩展方法,自带方法不能满足的时候可以添加新方法   /// </summary>   /// <returns></returns>   public List<T> CommQuery(string sql)   {    //base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作    return base.Context.Queryable<T>().Where(sql).ToList();   }  }

  

新版本还添加了切换仓储功能

  public class C1Service : Repository<C1Table>  {   public void Test()    {    base.AsTenant().BeginTran();    base.GetList(); //调用内部仓储方法    base.ChangeRepository<Repository<C2Table>>().GetList();//调用外部仓储    base.AsTenant().CommitTran();   }  }

  

 3、行列互转功能 

第一个参数 列名、第二个参数 头行名、第三个参数 值

 var test06 = db.Queryable<Order>()     .ToPivotTable(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Datatable var test07 = db.Queryable<Order>()   .ToPivotList(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回List<dynamic>
var test08 = db.Queryable<Order>() .ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Json

 

源码下载: https://github.com/donet5/SqlSugar

官网地址:  https://www.donet5.com/Home/Doc









原文转载:http://www.shaoqun.com/a/707733.html

跨境电商:https://www.ikjzd.com/

55海淘网:https://www.ikjzd.com/w/1723

欧舒丹:https://www.ikjzd.com/w/1756


介绍SqlSugar是一款老牌.NET开源ORM框架,由果糖大数据科技团队维护和更新,Githubstar数仅次于EF和Dapper优点:简单易用、功能齐全、高性能、轻量级、服务齐全、有专业技术支持一天18小时服务支持数据库:MySql、SqlServer、Sqlite、Oracle、postgresql、达梦、人大金仓新功能介绍最新稳定版本5.0.2.8,发布后1个月时间NUGET下载量达到50
sca:https://www.ikjzd.com/w/2424
跨境通电子商务网站:https://www.ikjzd.com/w/1329
ideal:https://www.ikjzd.com/w/2286
人民币跨境支付系统升级:https://www.ikjzd.com/home/628
妻子欲望强烈让我无法应对:http://www.30bags.com/a/252454.html
丈夫屡出轨 我以放荡报复:http://www.30bags.com/a/253290.html

No comments:

Post a Comment