ABP-引入SqlSugar-简单版
上一篇引入了Dapper框架,估计大家都会用了。但是很多都被封装,想探究原理的小伙伴就很失望了。那么今天的SqlSugar就说说大概思路。简单版和ABP的关联比较少,未来我还会写一期切合ABP框架的,小伙伴稍等下。
一。为了代码清晰,我新建了一个类库。引入了SqlSugar的框架包,2个仓储类,1个DbContext
声明实体
[SugarTable("BasBloodLevel")]public class BasBloodLevel{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Code { get; set; }}
二。先实现基本仓储IBaseRepository 与 BaseRepository
/// <summary>/// 基类接口,其他接口继承该接口/// </summary>/// <typeparam name="TEntity"></typeparam>public interface IBaseRepository<TEntity> where TEntity : class{/// <summary>/// 根据ID查询/// </summary>/// <param name="objId"></param>/// <returns></returns>Task<TEntity> QueryByID(object objId);/// <summary>/// 添加/// </summary>/// <param name="model"></param>/// <returns></returns>Task<bool> Add(TEntity model);/// <summary>/// 修改/// </summary>/// <param name="model"></param>/// <returns></returns>Task<bool> Update(TEntity model);/// <summary>/// 删除/// </summary>/// <param name="ids"></param>/// <returns></returns>Task<bool> DeleteByIds(object[] ids);}
/// <summary>/// 基类实现/// </summary>/// <typeparam name="TEntity"></typeparam>public class BaseRepository<TEntity> : DbContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new(){/// <summary>/// 写入实体数据/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<bool> Add(TEntity model){//这里需要注意的是,如果使用了Task.Run()就会导致 sql语句日志无法记录改成下面的//var i = await Task.Run(() => Db.Insertable(model).ExecuteCommand());var i = await Db.Insertable(model).ExecuteCommandAsync();return i > 0;}/// <summary>/// 根据ID删除/// </summary>/// <param name="ids"></param>/// <returns></returns>public async Task<bool> DeleteByIds(object[] ids){var i = await Db.Deleteable<TEntity>().In(ids).ExecuteCommandAsync();return i > 0;}/// <summary>/// 根据ID查询一条数据/// </summary>/// <param name="objId"></param>/// <returns></returns>public async Task<TEntity> QueryByID(object objId){return await Db.Queryable<TEntity>().InSingleAsync(objId);}/// <summary>/// 更新实体数据/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<bool> Update(TEntity model){//这种方式会以主键为条件var i = await Db.Updateable(model).ExecuteCommandAsync();return i > 0;}}
三、实现SqlSugar的DB
此处的 ConnectionString 地址,我们可以直接读取 ABP框架的配置文件,但是为了方便我直接写死了
public class DbContext<T> where T : class, new(){public DbContext(){Db = new SqlSugarClient(new ConnectionConfig(){
//数据库地址我们可以直接读取 ABP框架的配置文件,但是为了方便我直接写死了ConnectionString = "Server=****; Database=****; Uid=sa; Pwd=****;MultipleActiveResultSets=true;",DbType = DbType.SqlServer,InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息IsAutoCloseConnection = true,//开启自动释放模式});//调式代码 用来打印SQL Db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine(sql + "\r\n" +Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));Console.WriteLine();};}//注意:不能写成静态的public SqlSugarClient Db;//用来处理事务多表查询和复杂的操作public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用来操作当前表的数据public SimpleClient<BasBloodLevel> BasBloodLevelDb { get { return new SimpleClient<BasBloodLevel>(Db); } }//用来处理User表的常用操作}
四。实现依赖注入这样我们就能全局使用了
[DependsOn(typeof(AbpZeroCoreModule))]public class Module : AbpModule{public override void Initialize(){IocManager.Register(typeof(IBaseRepository<>), typeof(BaseRepository<>), DependencyLifeStyle.Singleton);//依赖注入程序集 IocManager.RegisterAssemblyByConvention(typeof(Module).GetAssembly());}}
既然要实现依赖注入,那肯定要初始化这个类触发注入了。我选择在EF层里加,这样可以不影响原有的EF层初始化
五。最后就到应用层使用了
直接引用对应的 IBaseRepository仓储
public class BasBloodBreedAppService : BloodTestLibSystemAppServiceBase,IApplicationService{private IBaseRepository<BasBloodLevel> _baseRepository { get; set; }public BasBloodBreedAppService(IBaseRepository<BasBloodLevel> baseRepository) {_baseRepository = baseRepository;}public async Task<BasBloodLevel> GetBase() {var ce=await _baseRepository.QueryByID(1);return ce;}}
证明一下我是成功的
此刻 引入SqlSugar就完成了。但是他确实了很ABP很多好用的操作。下一篇继续优化
ABP-引入SqlSugar-简单版相关推荐
- 课程设计——模仿网易云UI设计基础(超简单版)
本来想把我自己做的东西放出来给你们的,但是解释起来有点难, 所以就先弄出一个简单版本,也就是可以过关的版本. 先上我的版本,如果要弄这种的可以私聊我好吧-0-. 简单版,好像花了3个小时吧.上图. 直 ...
- HTML+CSS基础知识简单版
HTML+CSS基础知识简单版 一.HTML概述 HTML:超文本标记语言,其实就是用来开发网页的一门语言: CSS:层叠样式表,可以用于渲染网页.美化网页.做网页. 1.HTML介绍 HTML:超文 ...
- Springboot整合Poi导出excel(简单版)
一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...
- LeetCode 11. Container With Most Water--Java 解法--困雨水简单版
LeetCode 11. Container With Most Water–Java 解法 此文首发于我的个人博客:LeetCode 11. Container With Most Water–Ja ...
- luogu P3808 【模板】AC自动机(简单版)
二次联通门 : luogu P3808 [模板]AC自动机(简单版) /*luogu P3808 [模板]AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就 ...
- 008 数据结构逆向—数组(简单版)
文章目录 前言 逆向背包数组 一维背包数组 二维背包数组 数组结构分析 总结 前言 对于游戏逆向来说,核心需求其实就只有两个 追踪游戏数据 定位游戏功能call 对于追踪游戏数据来说,单纯从一个寄存器 ...
- 【模板】AC自动机(简单版)
题目背景 通过套取数据而直接"打表"过题者,是作弊行为,发现即棕名. 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据 ...
- P3808,P3796-[模板]AC自动机(简单版/加强版)
简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...
- 05-Flutter移动电商实战-dio基础_引入和简单的Get请求
05-Flutter移动电商实战-dio基础_引入和简单的Get请求 这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.d ...
- C++学习之路 | PTA乙级—— 1089 狼人杀-简单版(精简)
1089 狼人杀-简单版 (20 分)以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家 ...
最新文章
- Eclipse如何更改包名后,批量修改文件的包名
- C++知识点46——类继承中的类型转换与访问权限控制(中)
- 机房精密空调压缩机故障处理实例
- AWS发布低延迟互动直播服务
- 负载均衡很难?看完这篇全懂了
- java utf8 byte_byte以及UTF-8的转码规则
- python爬虫外快_我用Python爬虫挣钱的那些事
- (06)VHDL实现计数器
- Android 系统(140)---android.mk中几个常见配置
- 编译安装mysql gmake,编译安装mysql
- vSphere Replication:虚拟机的保护伞
- java高级工程师面试题_java高级工程师面试题及答案解析
- 第十八章、ActiveX控件
- PostgreSQL数据库从入门到精通
- 用甘特图控件VARCHART XGantt搞定项目管理
- 双足机器人重心在头部_双足行走机器人及其重心调节装置制造方法及图纸
- Android点将台:颜值担当[-Activity-],项目实践
- ISO7816协议中psam卡片的延时单元etu
- 验证正整数和0,不以0开头的数,如01,02则不通过
- 仿起点中文网的小说网站——JavaEE大作业