SqlSugar的Repository
1、仓储说明
仓储可以让你的方法更加的规范,需要什么方法都封装到仓储中,下次就能重复使用,并且能很好的和你业务拆分开
这种设计模式简单粗暴用起来也方便 ,文章下面有可以运行的DEMO
2、仓储方法
仓储有一套自带的数据库操作方法,比起 db.xx.xxx来说可能更简便些满足一些常用需求, 复杂的功能还是用db.xxx.xxx
//查询 var data1 = base .GetById(1); //根据id查询 var data2 = base .GetList(); //查询所有 (FindList) var data3 = base .GetList(it => it.Id == 1); //TOP1条件 var data4 = base .GetSingle(it => it.Id == 1); //查询单条记录,结果集不能超过1,不然会提示错误 var data= base .GetFirst(it => it.Id == 1); //查询第一条记录 var p = new PageModel() { PageIndex = 1, PageSize = 2 }; var data5 = base .GetPageList(it => it.Name == "xx" , p); Console.Write(p.PageCount); var data6 = base .GetPageList(it => it.Name == "xx" , p, it => it.Name, OrderByType.Asc); Console.Write(p.PageCount); List<IConditionalModel> conModels = new List<IConditionalModel>(); conModels.Add( new ConditionalModel(){FieldName= "id" ,ConditionalType=ConditionalType.Equal,FieldValue= "1" }); //id=1 var data7 = base .GetPageList(conModels, p, it => it.Name, OrderByType.Asc); var data8 = base .AsQueryable().Where(x => x.Id == 1).ToList(); //使用Queryable //插入 base .Insert(insertObj); base .InsertRange(InsertObjs); var id = base .InsertReturnIdentity(insertObj); //插入返回自增 var SnowflakeId= base .InsertReturnSnowflakeId(insertObj); //插入返回雪花ID base .AsInsertable(insertObj).ExecuteCommand(); //复杂功能使用Insertable //删除 base .Delete(T); //实体删除 需要有主键 base .Delete(List<T>); //集合删除 需要有主键 base .DeleteById(1); base .DeleteByIds( new object [] { 1, 2 }); //数组带是 ids方法 ,封装传 object [] 类型 //技巧 int [] 转换成 object[] 写法:ids.Cast<object>().ToArray() base .Delete(it => it.Id == 1); base .AsDeleteable().Where(it => it.Id == 1).ExecuteCommand(); //复杂功能用 Deleteable //实体方式更新更新 base .Update(insertObj); base .UpdateRange(InsertObjs); base .AsUpdateable(insertObj).UpdateColumns(it=> new { it.Name }).ExecuteCommand(); //复杂功能用 Updateable //表达式方式更新 base .Update(it => new Order() { Name = "a" /*可以多列*/ }, it => it.Id == 1); //只更新name 并且id=1 base .UpdateSetColumnsTrue(it=> new Order(){ Name = "a" }, it =>it.Id == 1); //更新name+过滤事件赋值字段 base .AsUpdateable().SetColumns(it=> new Order{ Name= "a" }) .Where(it=>it.Id==1).ExecuteCommand(); //复杂功能用 Updateable //高级操作 base .Context //获取db对象 base .AsSugarClient // 获取完整的db对象 base .AsTenant // 获取多库相关操作 //如果Context是子Db base .Context.Root //可以用Root拿主Db base .Context.Root.AsTenant() //拿到租户对象 //切换仓储 (可以注入多个仓储取代,这样就不用切换了) base .ChangeRepository<Repository<OrderItem>>() //多租户用法有区别:https://www.donet5.com/Home/Doc?typeId=2405 base .Change<OrderItem>() //只支持自带方法和单库 |
3、创建仓储
3.1 创建仓储
只需要几行代码就搞定了,我们定义的Repository是公用类,不能包含具体的类务逻辑,即使不使用扩展方法自带的方法也够开发
public class Repository<T> : SimpleClient<T> where T : class , new () { public Repository(ISqlSugarClient db) { base .Context=db; } /// <summary> /// 扩展方法,自带方法不能满足的时候可以添加新方法 /// </summary> /// <returns></returns> public List<T> CommQuery( string json) { //base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作 return null ; } } |
4、使用仓储
4.1 通过IOC使用仓储
//注入仓储 builder.Services.AddScoped( typeof (Repository<>)); //注入SqlSugar ...省略,不会看入门 //多个可以在构造函数写多个(用这种方式就不需要切换仓储了,有几个注入几个) public WeatherForecastController(Repository<Order> repOrder,Repository<Custom> repCustom) { _repOrder= repOrder; _repCustom=repCustom; } //使用注入的仓储 _repOrder.Insert(data); _repOrder.Context.Queryable<T>().ToList(); //.Context可以拿到db对象 //创建的仓储 public class Repository<T> : SimpleClient<T> where T : class , new () { public Repository(ISqlSugarClient db) //因为不需要切换仓储所以可以直接用构造函数获取db { base .Context=db; } } |
4.2 不用IOC使用仓储
//该用例建议升级5.1.3.35以上版本 public class UserService : IUserService, IDynamicApiController, ITransient //接口根据业务可以不需要 { //也可以用Ioc注入,不注入更方便些( ”=>" 表示用的时候才去new,不会在实例化类时候去new Repository<Abpusers> _userRepository => new Repository<Abpusers>(); //Repository不能单例 ISqlSugarClient _db=>_userRepository.Context; /// <summary> /// 获取用户列表 /// </summary> /// <returns></returns> public async Task<List<GetUserDto>> Get() { var users = await _userRepository.GetListAsync(); return users.Adapt<List<GetUserDto>>(); } } public class Repository<T> : SimpleClient<T> where T : class , new () { public Repository() { base .Context=DbHelper.GetDbInstance() } } |
注意:因为支持获取外部仓储,所以不需要像ABP那样构造函数写一堆
//获取外部仓储 var itemDal=_userRepository.ChangeRepository<Repository<OrderItem>>(); var orderDal=_userRepository.ChangeRepository<Repository<Order>>(); //base.Change<OrderItem>()这种写法与上面区别在于只能用ORM中的方法,没办法使用扩展类中的方法 |
DEMO下载: SqlSugarDemo.rar
4.3 db直接调用仓储
//使用ORM自带的仓储 var orderDal= db.GetSimpleClient<Order>(); //使用自定义的仓储 5.1.3.28-preview06 var orderDal=db.GetRepository<Repository<Order>>(); //3.1有介绍自定义仓储如创建 //使用仓储方法 orderDal.Insert(data); |
5、调用外部仓储
操作Order表的同时,我还想使用OrderItem这个仓储怎么办?
var orderItemDb = _userRepository.ChangeRepository<Repository<OrderItem>>(); public Repository(ISqlSugarClient db== null ) //这儿要改成可空 { base .Context=db; } //如果是多库模式需要注入,打开面页看标题4 //https://www.donet5.com/Home/Doc?typeId=2405 |
6、仓储中使用事务
注意: 如果是多租户事务写法有差异,看标题7
try { _userRepository.AsTenant().BeginTran(); //你的增查改方法 _userRepository.AsTenant().CommitTran(); } catch (Exception ex) { _userRepository.AsTenant().RollbackTran(); throw ; } |
注意: 如果是多租户事务写法有差异,看标题7
7、多租户使用仓储
因为要多个仓储用一个SqlSugarClient,我们需要用到Sugar.Ioc进行DB共享
https://www.donet5.com/Home/Doc?typeId=2405
SqlSugar的Repository的更多相关文章
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)>,我们完成了: * 引用SqlSugar * ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)
前言 大家好,我是Rector 从今天开始,Rector将为大家推出一个关于创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar]的文章系列, ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
前言 Hi,大家好,我是Rector 时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autof ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)
前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](六)
前言 大家好,我是Rector 又是星期五,很兴奋,很高兴,很high...啦啦啦... Rector在图享网又和大家见面啦!!!上一篇<一步一步创建ASP.NET MVC5程序[Reposit ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](七)
前言 大家好,我依旧是你们的老朋友Rector,很高兴又在周五的时候准时和大家见面. Rector的系列文章[一步一步创建ASP.NET MVC5程序[Repository+Autofac+Autom ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
前言 Hi, 大家好,还是星期五,还是Rector,又在图享网准时和大家见面了. 今天给大家带来系列教程<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Auto ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
前言 童鞋们,大家好 我是专注.NET开发者社区建设的实践者Rector. 首先,为自己间隔了两个星期五再更新本系列文章找个不充分的理由:Rector最近工作,家庭的各种事务所致,希望大家谅解. 本文 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)
前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...
随机推荐
- .Net Core 跨域
Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCorsMidd ...
- 浅谈locust 性能压测使用
1. 基本介绍 Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性.编写语言为Python,可通过Python来自定义构建性能压测场景脚本.Locust ...
- vim-修改键盘Tab键为四个空格
在 /etc/vimrc 文件后添加一行 set ts=4
- 0x69 图论-二分图的覆盖与独立集
A:Machine Schedule 输入 5 5 10 0 1 1 1 1 2 2 1 3 3 1 4 4 2 1 5 2 2 6 2 3 7 2 4 8 3 3 9 4 3 0 输出 3 在二分图 ...
- 彻底解决 gcr、quay、DockerHub 镜像下载难题
在使用 Docker 和 Kubernetes 时,我们经常需要访问 gcr.io 和 quay.io 镜像仓库,由于众所周知的原因,这些镜像仓库在中国都无法访问,唯一能访问的是 Docker Hub ...
- asio 使用 openssl 示例
#include <boost/asio.hpp> #include <boost/asio/ssl.hpp> #include <boost/algorithm/str ...
- zookeeper 集群环境搭建及集群选举及数据同步机制
本文为博主原创,未经允许不得转载: 目录: 1. 分别创建3个data目录用于存储各节点数据 2. 编写myid文件 3. 编写配置文件 4.分别启动 5.分别查看状态 6. 检查集群复制情况 ...
- spring boot 中WebMvcConfigurer相关使用总结
本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...
- MoeCTF 2023(西电CTF新生赛)WP
个人排名 签到 hello CTFer 1.题目描述: [非西电] 同学注意: 欢迎你来到MoeCTF 2023,祝你玩的开心! 请收下我们送给你的第一份礼物: https://cyberchef.o ...
- SQLServer数据库优化学习-总结
SQLServer数据库优化学习-总结 背景 各种能力都需要提升. 最近总是遇到SQLServer的问题 趁着周末进行一下学习与提高. 安装与优化 1. 数据库必须安装 64位, 不要安装成32位的版 ...