.net数据库操作框架SqlSugar的简单入门

介绍

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面个难题

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数据库框架源码

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

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

(0)

相关推荐

  • 浅谈如何使用vb.net从数据库中提取数据

    1.设置从Model中的Sub Main 启动 2.程序结构 3.Model1 Imports System.Windows.Forms.Application Module Module1 Sub Main() 'form1 是测试多文档窗口 'Dim frm1 As New Form1() 'frm1.Show() Dim formStudentSysMain As New FormStudentSysMain() formStudentSysMain.Show() Do While Tru

  • asp.net实现存储和读取数据库图片

    本文实例为大家分享了asp.net存储和读取数据库图片的具体代码,供大家参考,具体内容如下 1. 创建asp.net web窗体项目 代码如下: <body> <form id="form1" runat="server"> <h2>上传图片</h2> <div> <asp:FileUpload ID="ful_image" runat="server" /&g

  • ASP.NET Core2读写InfluxDB时序数据库的方法教程

    前言 在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存放管理这种有着时间顺序数据的,时序数据库一般都支持时序数据的快速写入.持久化.多纬度的聚合查询等基本功能. InfluxDB简介 InfluxDB是一个基于时间序列数据而开发的高性能数据存储平台,它可以对时序数据进行高吞吐量的摄取.压缩和实时查询.InfluxDB是用Go语言编写的,它会编译成一个没

  • .NET Core Dapper操作mysql数据库的实现方法

    前言 现在ORM盛行,市面上已经出现了N款不同的ORM套餐了.今天,我们不谈EF,也不聊神马黑马,就说说 Dapper.如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头(手动下翻)一看究竟. 配置篇 俗话说得好,欲要善其事必先利其器.首先,我们要引入MySql.Data 的Nuget包.有人可能出现了黑人脸,怎么引入.也罢,看在你骨骼惊奇的份上,我就告诉你,两种方式: 第一种方式 Install-Package MySql.Data -Version 8.0.15

  • .net core利用orm如何操作mysql数据库详解

    前言 众所周知Mysql数据库由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库.MySQL是一个多用户.多线程的关系型数据库管理系统. 工作模式是基于客户机/服务器结构.目前它可以支持几乎所有的操作系统. 简单的来说 ,MySql是一个开放的.快速的.多线程的.多用户的SQL数据库服务器. 下面讲解如何在.net core中使用mysql数据库,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 操

  • ASP.NET WebAPI连接数据库的方法

    ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台. 本文主要实现ASP.NET WebAPI 连接数据库获取数据,并以Json字符串格式返回. 1.创建ASP.NET Web Application(.NET Framework)项目: 2.选择Web API: 3.创建新项目完成: 在ValuesContr

  • Asp.Net Core中创建多DbContext并迁移到数据库的步骤

    在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbContext则主要是和具体业务相关的内容,这两个部分彼此之间可以分开,那么这个时候我们就可以在我们的项目中创建两个不同的DbContext,然后分别注入进去,当然这两个DbContext可以共用一个ConnectionString,也可以分别使用不同的DbContext,这个需要根据不同的需要来确定,在我们

  • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

    本文实例讲述了C# Ado.net读取SQLServer数据库存储过程列表及参数信息的方法.分享给大家供大家参考,具体如下: 得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name 得到某个存储过程的参数信息:(SQL方法) select * from syscolumns where ID in (SELECT id FROM sysobjects

  • 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle数据库

    前言 虽然一直在说"去IOE化",但是在国企和政府,Oracle的历史包袱实在太重了,甚至很多业务逻辑都是写在Oracle的各种存储过程里面实现的-- 我们的系统主要的技术栈是Django / Spring / AspNetCore,Java的不必说对Oracle支持肯定没问题,关键在于Django对Oracle版本有要求,兼容性不是特别好,Oracle版本没办法随意升级的,所以我想到用.Net Core来写个中间层,让其他系统可以方便的使用Oracle的数据和存储过程- ODP.NE

  • .net core下配置访问数据库操作

    配置读取 .net core下读取配置还是有点麻烦的,本身没有System.Configuration.dll,所以在进行配置前需要自行引用Microsoft.Extensions.Configuration,截图如下: 这样的话我们就可以配置读取的相关编码了,比如我们数据库的链接字符串,在appsettings.json添加对应的数据库配置: "ConnectionStrings": { "TestDb": "server=localhost;port=

随机推荐