博客
关于我
.net 简单的数据库操作框架
阅读量:453 次
发布时间:2019-03-06

本文共 4511 字,大约阅读时间需要 15 分钟。

SqlSugar 开源数据库操作框架介绍

SqlSugar 是一款经典的 .NET 数据库操作框架,由果糖大数据科技团队维护和持续更新。作为一款功能强大且性能优越的数据库操作工具,SqlSugar 在开发者社区获得了广泛的认可,其 GitHub star 数量仅次于 EF 和 Dapper。

SqlSugar 的主要优势

  • 简单易用:提供丰富的内置功能,减少手动操作,提升开发效率。
  • 功能齐全:支持多种数据库类型,如 MySQL、SqlServer、Sqlite、Oracle、PostgreSQL、达梦、人大金仓等。
  • 高性能:在保证功能完整性的同时,保持操作效率极高。
  • 轻量级:框架自身体积小,减少资源占用。
  • 全面的服务支持:提供专业的技术支持,24 小时 / 365 天在线服务。

SqlSugar 支持的数据库类型

  • 关系型数据库:MySQL、SqlServer、Sqlite、Oracle、PostgreSQL。
  • 开源数据库:达梦、人大金仓。

SqlSugar 的最新版本功能

SqlSugar 的最新稳定版本为 5.0.2.8,在发布后的一个月内在 NuGet 平台下载量达到 5000 次,用户反馈极其满意。随后又推出了 5.0.2.9 版本,基于稳定版本的基础上新增了 3 个核心功能:

  • 配置查询:解决了大量字典表和简单联表查询的问题。
  • 多租户 + 仓储 + 自动分配:支持多个租户同时连接数据库,自动分配配置 ID。
  • 行转列功能:将数据以表格形式返回,支持 Datatable、List 和 Json 格式输出。
  • 配置查询:简化字典表联表问题

    SqlSugar 的配置查询功能通过预先定义字典表,实现了在单表查询中直接获取所需信息的需求。以下是使用配置查询功能的具体示例:

    创建测试数据

    首先,创建一个字典实体类:

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

    然后,通过 SqlSugar 初始化字典表并插入测试数据:

    var db = GetInstance();
    var datas = new List
    ();
    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(datas);
    db.Insertable(datas).ExecuteCommand();

    传统联表查询的缺点

    在传统的数据库设计中,字典表查询往往面临以下问题:

  • 连表或子查询:手动编写联表查询,效率低下且代码冗长。
  • 内存赋值:对于字典表超过 1000 条的情况,内存赋值会导致性能问题,且无法支持排序或 LIKE 查询。
  • SqlSugar 的配置查询解决方案

    通过 SqlSugar 的配置查询功能,可以在单表查询中直接解决字典表问题。以下是具体实现步骤:

  • 首先,获取所有字典表的类型:
  • if (!db.ConfigQuery.Any())
    {
    var types = db.Queryable
    ()
    .Select(it => it.Type)
    .Distinct()
    .ToList();
    foreach (var type in types)
    {
    db.ConfigQuery.SetTable(
    it => it.Code,
    it => it.Name,
    type,
    it => it.Type == type
    );
    }
    }
    1. 查询主表数据时,通过配置字典表直接获取对应信息:
    2. var res = db.Queryable
      ()
      .Select(it => new Person()
      {
      Id = it.Id.SelectAll(),
      SexName = it.SexId.GetConfigValue("sex"),
      ProvinceName = it.ProvinceId.GetConfigValue("province"),
      CityName = it.CityId.GetConfigValue("city")
      })
      .ToList();

      通过配置查询功能,开发者可以显著降低重复联表查询的工作量,提升开发效率。

      多租户 + 仓储 + 自动分配

      SqlSugar 的多租户功能通过 ConfigId 区分不同的数据库实例,支持动态切换数据库。以下是实现多租户的具体代码示例:

      public class Repository
      : SimpleClient
      where T : class, new()
      {
      public Repository(ISqlSugarClient context = null) : base(context)
      {
      if (context == null)
      {
      var db = new SqlSugarClient(new List
      ()
      {
      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
      ().ConfigId;
      db.ChangeDatabase(configId);
      }
      }
      public List
      CommQuery(string sql)
      {
      return base.Context.Queryable
      ()
      .Where(sql)
      .ToList();
      }
      }

      此外,新版本还增加了切换仓储功能,支持在同一个服务中切换不同的数据仓储。

      行转列功能

      SqlSugar 的行转列功能可以将数据以表格形式返回,支持多种数据格式。以下是使用行转列功能的示例:

      var test06 = db.Queryable
      ()
      .ToPivotTable(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));
      var test07 = db.Queryable
      ()
      .ToPivotList(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));
      var test08 = db.Queryable
      ()
      .ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));

      通过行转列功能,开发者可以方便地将数据转换为多种格式,提升数据处理效率。

      总结

      SqlSugar 作为一款功能强大、性能优越的数据库操作框架,通过配置查询、多租户支持和行转列功能等创新功能,显著提升了开发者的工作效率。如果你正在寻找一款适合 .NET 开发的数据库操作框架,SqlSugar 可能是你的不二之选。

    转载地址:http://shofz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串levenshtein distance编辑距离算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>
    Objective-C实现字符串split函数功能算法(附完整源码)
    查看>>
    Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
    查看>>
    Objective-C实现字符串word patterns单词模式算法(附完整源码)
    查看>>
    Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
    查看>>
    Objective-C实现字符串加解密(附完整源码)
    查看>>
    Objective-C实现字符串反转(附完整源码)
    查看>>
    Objective-C实现字符串复制功能(附完整源码)
    查看>>
    Objective-C实现字符串字符是否可以重新排列以形成回文算法(附完整源码)
    查看>>
    Objective-C实现字符串排列算法(附完整源码)
    查看>>
    Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
    查看>>
    Objective-C实现字符串是否是有效的url地址算法(附完整源码)
    查看>>
    Objective-C实现字符串是否是有效的电子邮件地址算法(附完整源码)
    查看>>
    Objective-C实现字符串替换replace函数功能(附完整源码)
    查看>>
    Objective-C实现字符串查找子串(附完整源码)
    查看>>
    Objective-C实现字符串模式匹配算法(附完整源码)
    查看>>