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

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

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/

    你可能感兴趣的文章
    PHP利用正则表达式实现手机号码中间4位用星号(*)替换显示
    查看>>
    PHP加密与安全的最佳实践
    查看>>
    PHP去掉转义符
    查看>>
    php反射api
    查看>>
    php取当天的最后一秒_Docker快速搭建PHP开发环境详细教程
    查看>>
    php后台的在控制器中就可以实现阅读数增加
    查看>>
    php命令行生成项目结构
    查看>>
    php商店管理系统,基于PHP的商店管理系统.doc
    查看>>
    php在liunx系统中设置777权限不起作用解决方法
    查看>>
    PHP基于openssl实现的非对称加密操作
    查看>>
    php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...
    查看>>
    RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
    查看>>
    PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
    查看>>
    PHP学习总结(12)——PHP入门篇之变量
    查看>>
    PHP学习总结(13)——PHP入门篇之常量
    查看>>
    PHP学习总结(14)——PHP入门篇之常用运算符
    查看>>
    PHP学习总结(1)——PHP入门篇之PHP可以做什么?
    查看>>
    PHP学习总结(4)——PHP入门篇之PHP计算表达式
    查看>>
    PHP学习总结(7)——PHP入门篇之PHP注释
    查看>>
    PHP学习总结(9)——PHP入门篇之WAMPServer服务控制面板介绍
    查看>>