前言,暂时挥别NHibernate(虽然我忽然发现这玩意还挺有意思的,不过看得人很少)。大步进入了有不少小伙伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是这个吧?sql
这是一个由国内开发者开发的ORM框架,是一个轻量级框架(最新版的sqlSugarCore大概只有290kb)。下图是sqlSugar的功能描述:shell
从图中咱们可以大概看出,SqlSugar的使用须要预先建立一个SqlSugarClient对象。SqlSugar在此基础上添加了CRUD、实体信息维护(映射关系)、配置(AOP/过滤器等)、模式(DbFirst、CodeFirst)还有一些工具类等。能够看到这是一个简而全的框架。数据库
同时,SqlSugar也为查询进行了进一步的扩展,如下是它支持的功能,以及在查询上的加强:c#
好了,废话很少说,先来试一下如何使用吧。bash
本节环境是dotnet + vscode。由于个人Rider过时了,懒得折腾。系统又是Linux,因此选择这种方式。至于Visual Studio和Rider的操做,十分简单,并且以前《C#基础系列16》里有过介绍。框架
先建一个解决方案,名字为DataProvider:ide
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。.net
由于咱们只是给项目SqlSugarDemo
添加这个包,而不是给整个解决方案添加,因此咱们须要预先切换目录到SqlSugarDemo里:
cd SqlSugarDemo/
而后使用命令行安装 sqlSugarCore:
dotnet add package sqlSugarCore
或者使用 NuGet:
Install-Package sqlSugarCore
过一会就能够在控制台中看到安装成功的消息:
log : Restore completed in XX sec for XXXXXX/SqlSugarDemo/SqlSugarDemo.csproj.
在上一节中,咱们成功在项目中安装了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, }); } }
而后测试插入:
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();
匆匆一撇,发现SqlSugar也是一个让我感受惊艳的ORM框架,功能全面,效率也很是不错。下一篇将为小伙伴们深刻探索一下sqlSugar。
更多内容烦请关注个人博客《高先生小屋》