百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

一文上手SqlSugar 「C# 数据操作系列」

bigegpt 2024-08-16 14:09 2 浏览

0. 前言

前言,暂时挥别NHibernate(虽然我突然发现这玩意还挺有意思的,不过看得人不多)。大步进入了有很多小伙伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是这个吧?

这是一个由国内开发者开发的ORM框架,是一个轻量级框架(最新版的sqlSugarCore大概只有290kb)。下图是sqlSugar的功能描述:

从图中我们能够大概看出,SqlSugar的使用需要预先创建一个SqlSugarClient对象。SqlSugar在此基础上添加了CRUD、实体信息维护(映射关系)、配置(AOP/过滤器等)、模式(DbFirst、CodeFirst)还有一些工具类等。可以看到这是一个简而全的框架。

同时,SqlSugar也为查询进行了进一步的扩展,以下是它支持的功能,以及在查询上的增强:

好了,废话不多说,先来试一下如何使用吧。

1. 安装

本节环境是dotnet + vscode。因为我的Rider过期了,懒得折腾。系统又是Linux,所以选择这种方式。至于Visual Studio和Rider的操作,十分简单,而且之前《C#基础系列16》里有过介绍。

先建一个解决方案,名字为DataProvider:

dotnet new sln --name DataProvider

然后创建一个SqlSugarDemo的控制台项目:

dotnet new console --name SqlSugarDemo

将这个项目添加到解决方案里:(这一步为了方便后续管理)

dotnet sln add SqlSugarDemo

然后准备安装 sqlSugarCore 。SqlSugar有两个版本,这里使用的是sqlSugarCore,这是针对.net core支持的版本。另一个是sqlSugar,是基于.netframework 4.X的。我们的系列是.net core的,所以就使用sqlSugarCore。

因为我们只是给项目SqlSugarDemo添加这个包,而不是给整个解决方案添加,所以我们需要预先切换目录到SqlSugarDemo里:

cd SqlSugarDemo/

然后使用命令行安装 sqlSugarCore:

dotnet add package sqlSugarCore

或者使用 NuGet:

Install-Package sqlSugarCore

过一会就可以在控制台中看到安装成功的消息:

log  : Restore completed in XX sec for XXXXXX/SqlSugarDemo/SqlSugarDemo.csproj.



2. 基本使用示例

在上一节中,我们成功在项目中安装了sqlSugarCore,那么在这一节中将带领小伙伴们一起探索SqlSugar。

先创建一个普通的模型:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

创建一个操作类,取名为 DefaultContext,根据给出的文档得知,SqlSugar每次操作数据的时候需要持有一个 SqlSugarClient对象。所以,这个类的定义应该如下:

public class DefaultContext
{
    public SqlSugarClient Client { get; }

    public DefaultContext(string connectionString, DbType dbType)
    {
        Client = new SqlSugarClient(new ConnectionConfig
        {
            ConnectionString = connectionString,//"Data Source=./demo.db",
            DbType = dbType,
            IsAutoCloseConnection = true,
        });
    }
}
  • ConnectionString :连接字符串
  • DbType:数据库类型,共有以下几个值 MySql SqlServer Sqlite Oracle PostgreSQL
  • IsAutoCloseConnection:是否自动关闭连接,推荐true,默认为false。默认情况下,需要手动释放

然后测试插入:

var context = new DefaultContext("Data Source=./demo.db", DbType.Sqlite);
context.Client.Insertable<Person>(new Person
{
    Age = 10,
    Name = "小明"
}).ExecuteCommand();

这个时候,提示如下错误:no such table: Person

原因很简单,因为数据库demo.db 里没有这个表。也就是SqlSugar默认不会自动生成表,但生成了一个空壳数据库。

这时候,需要在DefaultContext的构造方法里,为Client添加一些配置:

Client.CodeFirst.InitTables<Person>();

这一行的意思是使用CodeFirst模式,自动生成表 Person。

当然,这样并不意味着就能继续了,我们还需要设置 主键策略,在初始化 SqlSugarClient的时候,修改为:

Client = new SqlSugarClient(new ConnectionConfig
{
    ConnectionString = connectionString,//"Data Source=./demo.db",
    DbType = dbType,
    IsAutoCloseConnection = true,
    InitKeyType = InitKeyType.Attribute  //添加这行,意思是根据实体类取发现主键
});

然后重新插入,执行成功。

现在进行查询测试:

var query = context.Client.Queryable<Person>();

query是一个ISugarQueryable<T>类型的元素,这个接口支持方法链查询和查询表达式两种查询方式:

var list = (from a in context.Client.Queryable<Person>()
            select a).ToList();
Console.WriteLine(list.Count);

通过这种方式,直接获取了一个Person类型的列表。

然后,我们将针对这几个元素进行修改和删除测试。先来修改:

list[0].Age =22;
context.Client.Updateable(list[0]).ExecuteCommand();

直接执行会提示如下错误:

意思是没有提供主键或者检索条件。根据它的错误信息,我们可以得知解决方法基础为两种:

修改方案1:

在Person类上添加主键,并设置自增长。

public class Person
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] 
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

解决方案2:

添加筛选条件:

context.Client.Updateable(list[0]).Where(t=>t.Name == "小明").ExecuteCommand();

我采用了第一个方法,添加了主键配置,重新运行,执行结果正确。

删除,在更新修改完成后,删除也正常使用:

context.Client.Deleteable(list[0]).ExecuteCommand();

3 总结

匆匆一撇,发现SqlSugar也是一个让我感觉惊艳的ORM框架,功能全面,效率也非常不错。下一篇将为小伙伴们深入探索一下sqlSugar。

更多内容烦请关注我的博客《高先生小屋》

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...