上一篇引入了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-简单版相关推荐

  1. 课程设计——模仿网易云UI设计基础(超简单版)

    本来想把我自己做的东西放出来给你们的,但是解释起来有点难, 所以就先弄出一个简单版本,也就是可以过关的版本. 先上我的版本,如果要弄这种的可以私聊我好吧-0-. 简单版,好像花了3个小时吧.上图. 直 ...

  2. HTML+CSS基础知识简单版

    HTML+CSS基础知识简单版 一.HTML概述 HTML:超文本标记语言,其实就是用来开发网页的一门语言: CSS:层叠样式表,可以用于渲染网页.美化网页.做网页. 1.HTML介绍 HTML:超文 ...

  3. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  4. LeetCode 11. Container With Most Water--Java 解法--困雨水简单版

    LeetCode 11. Container With Most Water–Java 解法 此文首发于我的个人博客:LeetCode 11. Container With Most Water–Ja ...

  5. luogu P3808 【模板】AC自动机(简单版)

    二次联通门 : luogu P3808 [模板]AC自动机(简单版) /*luogu P3808 [模板]AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就 ...

  6. 008 数据结构逆向—数组(简单版)

    文章目录 前言 逆向背包数组 一维背包数组 二维背包数组 数组结构分析 总结 前言 对于游戏逆向来说,核心需求其实就只有两个 追踪游戏数据 定位游戏功能call 对于追踪游戏数据来说,单纯从一个寄存器 ...

  7. 【模板】AC自动机(简单版)

    题目背景 通过套取数据而直接"打表"过题者,是作弊行为,发现即棕名. 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据 ...

  8. P3808,P3796-[模板]AC自动机(简单版/加强版)

    简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...

  9. 05-Flutter移动电商实战-dio基础_引入和简单的Get请求

    05-Flutter移动电商实战-dio基础_引入和简单的Get请求 这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.d ...

  10. C++学习之路 | PTA乙级—— 1089 狼人杀-简单版(精简)

    1089 狼人杀-简单版 (20 分)以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家 ...

最新文章

  1. Eclipse如何更改包名后,批量修改文件的包名
  2. C++知识点46——类继承中的类型转换与访问权限控制(中)
  3. 机房精密空调压缩机故障处理实例
  4. AWS发布低延迟互动直播服务
  5. 负载均衡很难?看完这篇全懂了
  6. java utf8 byte_byte以及UTF-8的转码规则
  7. python爬虫外快_我用Python爬虫挣钱的那些事
  8. (06)VHDL实现计数器
  9. Android 系统(140)---android.mk中几个常见配置
  10. 编译安装mysql gmake,编译安装mysql
  11. vSphere Replication:虚拟机的保护伞
  12. java高级工程师面试题_java高级工程师面试题及答案解析
  13. 第十八章、ActiveX控件
  14. PostgreSQL数据库从入门到精通
  15. 用甘特图控件VARCHART XGantt搞定项目管理
  16. 双足机器人重心在头部_双足行走机器人及其重心调节装置制造方法及图纸
  17. Android点将台:颜值担当[-Activity-],项目实践
  18. ISO7816协议中psam卡片的延时单元etu
  19. 验证正整数和0,不以0开头的数,如01,02则不通过
  20. 仿起点中文网的小说网站——JavaEE大作业

热门文章

  1. Vs code PIO一直loading
  2. PS 仿制图章 轻松换支付宝赞赏码 GIF动态图手把手教你
  3. 最好的投资理财工具 - 基金
  4. qq输入法自定义短语并在手机qq输入法使用
  5. 『CPU飙高』在开发环境中,.NET如何排查CPU飙高原因
  6. 时间戳转换为年月日时分秒
  7. 安装arcgis api for python步骤、以及注意事项
  8. 关于OpenCV for Python入门-face_recognition实现人脸识别
  9. C#如何输入对号字符串
  10. 蒲丰投针实验原理_神奇的圆周率——布丰投针实验