如何通过SqlSugar .NET数据库操作框架实现高效入门级数据库操作?

2026-04-01 09:531阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1575个文字,预计阅读时间需要7分钟。

如何通过SqlSugar .NET数据库操作框架实现高效入门级数据库操作?

目录 + 介绍 + 框架新功能 + 1. 配置查询 + 1.1 创建测试数据 + 1.2 传统字典型联表实现缺陷 + 1.3 配置表简化字典型联表 + 1.4 简单联表查询也可配置 + 2. 多租户 + 存储 + 自动分配 + 3. 行列互转功能 + 介绍 + S

目录
  • 介绍
  • 框架新功能
  • 1、配置查询
    • 1.1 创建测试数据
    • 1.2 传统字典联表实现缺点
    • 1.3 配置表简化字典联表
    • 1.4 简单联表查询也可以配置
  • 2、多租户+仓储+自动分配
    • 3、行列互转功能 

      介绍

      SqlSugar是一款 老牌 .NET数据库操作框架,由果糖大数据科技团队维护和更新 ,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).ExecuteCommand();//这样就能把数据插进数据库了<br>

      在建一个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 ProvinceId { 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面个难题

      如何通过SqlSugar .NET数据库操作框架实现高效入门级数据库操作?

      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); } //如果其中Code都是唯一值可以按 1.4中的用法使用循环都不要 }

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

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

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

      db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//配置Order<br> 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><br> var test08 = db.Queryable<Order>() .ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Json

      .NET数据库框架源码

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

      以上就是.net数据库操作框架SqlSugar的简单入门的详细内容,更多关于.net数据库操作框架SqlSugar的资料请关注易盾网络其它相关文章!

      标签:简单

      本文共计1575个文字,预计阅读时间需要7分钟。

      如何通过SqlSugar .NET数据库操作框架实现高效入门级数据库操作?

      目录 + 介绍 + 框架新功能 + 1. 配置查询 + 1.1 创建测试数据 + 1.2 传统字典型联表实现缺陷 + 1.3 配置表简化字典型联表 + 1.4 简单联表查询也可配置 + 2. 多租户 + 存储 + 自动分配 + 3. 行列互转功能 + 介绍 + S

      目录
      • 介绍
      • 框架新功能
      • 1、配置查询
        • 1.1 创建测试数据
        • 1.2 传统字典联表实现缺点
        • 1.3 配置表简化字典联表
        • 1.4 简单联表查询也可以配置
      • 2、多租户+仓储+自动分配
        • 3、行列互转功能 

          介绍

          SqlSugar是一款 老牌 .NET数据库操作框架,由果糖大数据科技团队维护和更新 ,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).ExecuteCommand();//这样就能把数据插进数据库了<br>

          在建一个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 ProvinceId { 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面个难题

          如何通过SqlSugar .NET数据库操作框架实现高效入门级数据库操作?

          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); } //如果其中Code都是唯一值可以按 1.4中的用法使用循环都不要 }

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

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

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

          db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//配置Order<br> 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><br> var test08 = db.Queryable<Order>() .ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Json

          .NET数据库框架源码

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

          以上就是.net数据库操作框架SqlSugar的简单入门的详细内容,更多关于.net数据库操作框架SqlSugar的资料请关注易盾网络其它相关文章!

          标签:简单