C# 数据操作系列 - 13 SqlSugar 框架
小编:啊南 425阅读 2020.11.30
这是一个由国内开发者开发的ORM框架,是一个轻量级框架(最新版的sqlSugarCore大概只有290kb)。
我们能够大概看出,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(new Person
{
Age = 10,
Name = "小明"
}).ExecuteCommand();
这个时候,提示如下错误:no such table: Person
原因很简单,因为数据库demo.db 里没有这个表。也就是SqlSugar默认不会自动生成表,但生成了一个空壳数据库。
这时候,需要在DefaultContext的构造方法里,为Client添加一些配置:
Client.CodeFirst.InitTables();
这一行的意思是使用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();
query是一个ISugarQueryable类型的元素,这个接口支持方法链查询和查询表达式两种查询方式:
var list = (from a in context.Client.Queryable()
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的使用需要预先创建一个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
{
Age = 10,
Name = "小明"
}).ExecuteCommand();
这个时候,提示如下错误:no such table: Person
原因很简单,因为数据库demo.db 里没有这个表。也就是SqlSugar默认不会自动生成表,但生成了一个空壳数据库。
这时候,需要在DefaultContext的构造方法里,为Client添加一些配置:
Client.CodeFirst.InitTables
这一行的意思是使用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
query是一个ISugarQueryable
var list = (from a in context.Client.Queryable
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();
相关推荐
- SQL Server 常用函数 1.获取当前时间--GetDate()2.DatePart() 函数3.字符串截取--substring三个参数,第一个参数需要截取的,第二个参数,截取字符串的起始位置(起始位置是1),第三个参数需要截取字符串的长度。4.日期增减函数-DateAdd三个参数,第一参数合法的日期表达式,第二个参…
- 3DMAX提示和技巧 本主题标识使用 Civil View 的一些重要提示和技巧。常规使用屏幕分辨率至少为 1280x1024 的 Civil View。低于此分辨率时,一些面板将占用过多屏幕空间。 将视口设置为线框显示以达到最佳性能。 要尽可能简化用户界面,请在单个视口中工作并关闭 3ds Max 命令面…