SqlSugar 集成
10.1.1 关于 SqlSugar
SqlSugar
是 .NET/C# 平台非常优秀的 ORM
框架,目前 Nuget
总下载突破 700K,Github 关注量也高达 3.2K,是目前当之无愧的国产优秀 ORM 框架之一。
SqlSugar
官方地址:http://www.donet5.com/
SqlSugar
与 EF 优势: 性能比 EF 更快、语法上手更容易
SqlSugar
与 Dapper
优势: SqlSugar
功能更加丰富,性能丝毫不逊色于 Dapper
,并且批量操作性能更好
10.1.2 如何集成
在 Furion
框架中,已经推出 SqlSugar
拓展包 Furion.Extras.DatabaseAccessor.SqlSugar。
10.1.2.1 注册 SqlSugar
服务
使用非常简单,只需要在 Startup.cs
中添加 services.AddSqlSugar(config)
即可。如:
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
});
同时也可以添加更多配置,如:
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
},
db =>
{//处理日志事务db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine(sql);Console.WriteLine(string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));Console.WriteLine();};
});
安装拓展包位置
在 Furion
框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.SqlSugar
安装到 Furion.Core
层中。
10.1.3 基本使用
在使用之前,我们可以通过构造函数注入 ISqlSugarRepository<TEntity>
接口,如:
private readonly ISqlSugarRepository<Person> repository; // 仓储对象:封装简单的CRUD
private readonly ISqlSugarClient db; // 核心对象:拥有完整的SqlSugar全部功能
public PersonService(ISqlSugarRepository<Person> sqlSugarRepository)
{repository = sqlSugarRepository;db = repository.Context; // 推荐操作
}
10.1.4 数据库操作示例
// ================== SqlSugarClient ================
//查询功能
var data1 =db.Queryable<Student>().First(it=>it.Id==1); //db.GetById(1);
var data2 = db.Queryable<Student>().ToList();// db.GetList();
var data3 = db.GetList(it => it.Id == 1);
var data4 = db.GetSingle(it => it.Id == 1);
var p = new PageModel() { PageIndex = 1, PageSize = 2 };
var data5 = db.GetPageList(it => it.Name == "xx", p);//p.PageCount
var data6 = db.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel(){FieldName="id",ConditionalType=ConditionalType.Equal,FieldValue="1"});//id=1
var data7 = db.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);
// ================== 简单仓储 ================
//插入
repository.Insert(insertObj);
repository.InsertRange(InsertObjs);
var id = repository.InsertReturnIdentity(insertObj);
repository.AsInsertable(insertObj).ExecuteCommand();
//删除
repository.Delete(insertObj);
repository.DeleteById(1);
repository.DeleteByIds(new object [] { 1, 2 }); //数组带是 ids方法 ,封装传 object [] 类型
repository.Delete(it => it.Id == 1);
repository.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand();
//更新
repository.Update(insertObj);
repository.UpdateRange(InsertObjs);
repository.Update(it => new Order() { Name = "a", }, it => it.Id == 1);
repository.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand();
//异步方法用法
repository.Insert(insertObj);//同步
repository.InsertAsync(insertObj);//异步
//切换仓储
var orderRespository=db.GetSimpleClient<Order>();
orderRespository.Insert(Order);
10.1.5 SqlSugarClient
操作示例
10.1.5.1 基础查询
//查询所有
var getAll = db.Queryable<Student>().ToList();
//查询前10
var top10= db.Queryable<Student>().Take(10).ToList();
//查询单条
var getFirst = db.Queryable<Student>().First(it=>it.Id==1);
//with nolock
var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();
//根据主键查询
var getByPrimaryKey = db.Queryable<Student>().InSingle(2);
//查询总和
var sum = db.Queryable<Student>().Sum(it=>it.Id);
//是否存在
var isAny = db.Queryable<Student>().Where(it=>it.Id==-1).Any();
//模糊查
var list2 = db.Queryable<Order>().Where(it =>it.Name.Contains("jack")).ToList();
10.1.5.2 联表查询
var list = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.SchoolId==sc.Id)).Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToList();
生成的Sql如下:
SELECT [st].[ID] AS [id] ,[st].[Name] AS [name] ,[sc].[Name] AS [schoolName] FROM [STudent] stLeft JOIN School sc ON ( [st].[SchoolId] =[sc].[Id])
10.1.5.3 分页查询
int pageIndex = 1;int pageSize = 20;int totalCount=0;var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);
更多查询用法 : http://www.donet5.com/Home/Doc?typeId=1185
10.1.5.4 插入
//可以是 类 或者 List<类>
db.Insertable(insertObj).ExecuteCommand();
//插入返回自增列
db.Insertable(insertObj).ExecuteReturnIdentity();
//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();dt.Add("name", "1");dt.Add("CreateTime", null);
db.Insertable(dc).AS("student").ExecuteCommand();
//DataTable插入
Dictionary<string,object> dc= db.Utilities.DataTableToDictionary(dataTable);//转成字典就可以按上面的字典更新了
db.Insertable(dc).AS("student").ExecuteReturnIdentity();
//实体可以配置主键和自增列
public class Student
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public int? SchoolId { get; set; }public string Name { get; set; }
}
更多插入用法: http://www.donet5.com/Home/Doc?typeId=1193
10.1.5.5 更新
实体配置参考插入,只需要配置主键即可
//根据主键更新单条 参数 Class
var result= db.Updateable(updateObj).ExecuteCommand();
//不更新 Name 和TestId
var result=db.Updateable(updateObj).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()
//只更新 Name 和 CreateTime
var result=db.Updateable(updateObj).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand();
//根据表达式更新
var result71 = db.Updateable<Order>().SetColumns(it => it.Name == "a").SetColumnsIF(p!=null ,it => it.CreateTime == p.Value)//当p不等于null更新createtime列.Where(it => it.Id == 11).ExecuteCommand();
更多更新用法: http://www.donet5.com/Home/Doc?typeId=1191
10.1.5.6 删除
实体配置参考插入,只需要配置主键即可
//根据实体删除
db.Deleteable<Student>().Where(new Student() { Id = 1 }).ExecuteCommand();
//根据主键删除
db.Deleteable<Student>().In(1).ExecuteCommand();
//根据表达式删除
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
更多删除用法: http://www.donet5.com/Home/Doc?typeId=1195
10.1.6 Sql 查询
//sql分页
var list = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2,ref total);
//原生Sql用法
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new List<SugarParameter>(){new SugarParameter("@id",1),new SugarParameter("@name",2)
});
//参数2
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new{id=1,name=2});
//存储过程用法
var nameP= new SugarParameter("@name", "张三");
var ageP= new SugarParameter("@age", null, true);//设置为output
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",nameP,ageP);
方法名 | 描述 | 返回值 |
---|---|---|
SqlQuery< T >
|
查询所有返回实体集合 |
List
|
SqlQuery<T,T2>
|
可以返回 2 个结果集 |
Tuple<List, List>
|
SqlQuerySingle
|
查询第一条记录 |
T
|
GetDataTable
|
查询所有 |
DataTable
|
GetDataReader
|
读取 DR 需要手动释放 DR |
DataReader
|
GetDataSetAll
|
获取多个结果集 |
DataSet
|
ExecuteCommand
|
返回受影响行数,一般用于增删改 |
int
|
GetScalar
|
获取首行首列 |
object
|
GetString
|
获取首行首列 |
string
|
GetInt
|
获取首行首列 |
int
|
GetLong
|
获取首行首列 |
long
|
GetDouble
|
获取首行首列 |
Double
|
GetDecimal
|
获取首行首列 |
Decimal
|
GetDateTime
|
获取首行首列 |
DateTime
|
想了解更多 SqlSugar
知识可查阅 SqlSugar 官网。
10.1.7 打印 sql
到 Swagger
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
},
db =>
{db.Aop.OnLogExecuting = (sql, pars) =>{App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" +string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));};
});
SqlSugar 集成相关推荐
- 【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架--SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...
- .NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,FreeSql,SqlSugar ...
- SqlSugar ORM 入门到精通【一】入门篇
背景 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手. 2.x版本正式在自已公司内部项目使用 3.x版本得到了更多公司的喜欢不过也会 ...
- dapperpoco mysql_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...
- .Net开源SqlServer ORM框架SqlSugar整理
一.链接整理 官方Git源代码地址: https://github.com/sunkaixuan/SqlSugar 最新发布版更新地址:当前版本Release 3.5.2.1 https://gith ...
- SqlSugar 2.入门必看
文章目录 1.上下文概念 2.创建对象 2.1 SqlSugarClient 2.1.1 静态方法案例 2.1.2 SqlSugar.IOC注入案例 2.1.3 .NET IOC注入案例 2.2 Sq ...
- mysql orm .net_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...
- Nignx集成fastDFS后访问Nginx一直在加载中解决
问题描述: Nginx集成fastDFS后,访问Nginx一直在加载中,得不到页面.查看Nginx的错误日志: 可以看到是fastdfs.conf的配置错误,tracker的ip没有修改: fastd ...
最新文章
- Fedora安装Samba与windows共享文件
- 2.0 vue内置指令与自定义指令
- MS CRM 2011 Quick Find Active View
- x299服务器芯片组,18核心炸裂!X299主板全集:为它真拼了
- 论文浅尝 | 一种可解释的语义匹配复值网络
- linux for循环套for循环格式_4.20 for循环 break、continue关键字
- VS2010测试方面的文章
- 全球11大免费GIS数据源在此,速速来取!
- 【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree
- [USACO19FEB]Cow Dating——找规律
- 拓端tecdat|R语言用极大似然和梯度下降算法估计GARCH(p)过程
- android 自带TextToSpeech没有声音
- 中兴新支点操作系统_中兴新支点操作系统
- Golang Gin Router冲突 conflicts with existing wildcard
- Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式
- MySql表的基本增删改查详解
- Im4java + ImageMagick 缩略图补白加边
- Trends in Plant Science | 植物微生物群失调与安娜-卡列尼娜原则
- CSDN学习相关页面探讨
- 华硕飞行堡垒无线网卡9462黄色感叹号
热门文章
- 学姐报了几门选修课,我用Python给她做了一个自动答题软件
- 湖北民族学院c语言试卷,C实验参考答案(湖北民族学院计算机c语言课后习题答案)..doc...
- table中加表单元素每行怎么验证_Validform 一行代码搞定整站的表单验证 - 文章
- vs2019 安装resharper_如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?...
- 组件化开发之03 打造一喂航母战斗群
- 我的微语录周记2012-02-06---2012-…
- kali实战:断网攻击
- 数学分析 重积分(第21章)1 二重积分,格林公式,曲线积分与路线无关性,三重积分
- Java——集合(合集,简单的概括)
- WORD删除特定格式的数字(带小中大括号等等)