• C# 数据操作系列


    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

    image-20200521232829596

    原因很简单,因为数据库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();
    

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

    image-20200521235559454

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

    修改方案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。

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

    file

  • 相关阅读:
    HDU
    洛谷- P1306 斐波那契公约数
    HDU
    HDU
    POJ3321
    SPOJ
    HDU
    POJ 1236 Network of Schools
    POJ-3169 Layout (差分约束+SPFA)
    POJ-1062 昂贵的聘礼 (最短路)
  • 原文地址:https://www.cnblogs.com/c7jie/p/12938815.html
Copyright © 2020-2023  润新知