ABP引入SqlSugar框架的简单版创建使用

目录
  • 一 新建类库
    • 声明实体
  • 二 基本仓储
  • 三 实现SqlSugar的DB
  • 四 实现依赖注入
  • 五 应用层使用

上一篇引入了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框架的简单版创建使用的详细内容,更多关于ABP引入SqlSugar框架的资料请关注我们其它相关文章!

(0)

相关推荐

  • .net数据库操作框架SqlSugar的简单入门

    介绍 SqlSugar是一款 老牌 .NET数据库操作框架,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功能齐全.高性能.轻量级.服务齐全.有专业技术支持一天18小时服务 支持数据库:MySql.SqlServer.Sqlite.Oracle . postgresql.达梦.人大金仓 框架新功能 最新稳定版本5.0.2.8 ,发布后1个月时间NUGET下载量达到5000的版本,用户使用也相当满意 而在稳定版本的基础上又布了5.0.2.

  • ABP(现代ASP.NET样板开发框架)系列之二、ABP入门教程详解

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate ABP 的由来 "DRY--避免重复

  • 把Dapper 换成 SqlSugar ORM类的方法详解

    目录 为什么要写这篇文章 Dapper 介绍 SqlSugar 介绍 性能对比 移植教程 为什么要写这篇文章 因数我看到很多人虽然用着SqlSugar,但是同时也用着Dapper,因为SqlSugar兼容了Dapper所有API,所以既然你用了SqlSugar那么就没有必要在同一个项目中使用2个ORM 所以这篇文章是给使用SqlSugar或者你想使用SqlSugar的朋友看的 Dapper 介绍 Dapper是一个轻量级开源的ORM类,他是通过扩展IDbConnection提供一些有用的扩展方法

  • ABP引入Dapper框架的创建使用

    目录 一. 首先准备好一个数据库建一个表 二.建一个实体表 三.然后再ABP框架的EF层安装 Abp.Dapper包 使用 首先DbContext引入对应的DbSet 最后在应用层直接使用 ABP使用Dapper框架已经有很成熟的第三方包,简单的几句代码就能完成 一. 首先准备好一个数据库建一个表 二.建一个实体表 [Table("BasBloodLevel")] public class BasBloodLevel:Entity<int> { public string

  • 为ABP框架配置数据库

    目录 创建标准的EFCore数据库上下文 连接字符串 定义隔离的上下文 多数据库支持和配置 Freesql配置服务 在 AbpBase.Database 中,通过 Nuget 添加以下几个库: 版本都是 1.9.0-preview0917,你可以使用最新版本的. Freesql FreeSql.Provider.Sqlite FreeSql.Provider.SqlServer FreeSql.Provider.MySql 创建标准的 EFCore 数据库上下文 在 ABP 中,EFCore 上

  • ABP引入SqlSugar框架的简单版创建使用

    目录 一 新建类库 声明实体 二 基本仓储 三 实现SqlSugar的DB 四 实现依赖注入 五 应用层使用 上一篇引入了Dapper框架,估计大家都会用了.但是很多都被封装,想探究原理的小伙伴就很失望了.那么今天的SqlSugar就说说大概思路.简单版和ABP的关联比较少,未来我还会写一期切合ABP框架的,小伙伴稍等下. 一 新建类库 为了代码清晰,我新建了一个类库.引入了SqlSugar的框架包,2个仓储类,1个DbContext 声明实体 [SugarTable("BasBloodLeve

  • 使用.net core3.0 正式版创建Winform程序的方法(图文)

    前阵子一直期待.net core3.0正式版本的出来,以为这个版本出来,Winform程序又迎来一次新生了,不过9.23日出来的马上下载更新VS,创建新的.net core Winform项目,发现并没有Winform窗体设计器.而微软目前则是通过插件的方式,让我们单独下载Winform设计器,这个设计器还是预览版本,很多功能还是没有实现的,只能算是一个简单的雏形,本博客案例介绍基于.net core3.0创建一个普通的WInform程序,让大家了解下基于.net core3.0创建的程序的大概

  • YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解

    本文实例讲述了YII Framework框架使用YIIC快速创建YII应用之migrate用法.分享给大家供大家参考,具体如下: yii migrate 查看帮助 /* /www/yii_dev/yii/framework# php yiic migrate help Error: Unknown action: help USAGE yiic migrate [action] [parameter] DESCRIPTION This command provides support for d

  • Laravel框架实现简单的学生信息管理平台案例【附源码下载】

    本文实例讲述了Laravel框架实现简单的学生信息管理平台.分享给大家供大家参考,具体如下: laravel框架写的简易版的学生信息管理平台,贯穿了laravel的控制器.视图.模板.模型.中间件.路由规则的使用. 页面是使用BootStrap前端框架搭建 使用laravel实现了增删改查的功能. 代码下载链接在文章底部. //这是路由文件的关键代码 Route::group(['middleware' => ['web']], function () { Route::get('student

  • laravel框架中控制器的创建和使用方法分析

    本文实例讲述了laravel框架中控制器的创建和使用方法.分享给大家供大家参考,具体如下: laravel中我们可以使用 artisan 命令来帮助我们创建控制器文件. php artisan make:controller TestController TestController 控制器名我们可以任意指定.文件默认会创建在 app\Http\Controllers 目录下. 打开控制器文件,我们就可以添加自已的方法了. <?php namespace App\Http\Controllers

  • 用C语言实现简单版9*9扫雷小游戏

    一.扫雷的规则 玩家通过点击棋盘上的格子来探雷,如果此处不是雷,则会显示出一个数字代表以此格为中心的3×3的区域的雷数:而如果此处是雷,玩家被炸死,游戏结束.当玩家点击完所有非雷区时,玩家胜利. 二.代码实现前的一些问题 1.棋盘尺寸=数组尺寸? 显然我们会用数组来模拟棋盘.首先我们知道,当玩家点了非雷区时,该区域要反馈附近区域雷数的信息,这就意味着程序需要对以此格为中心的3×3区域的空间进行排查.而这个过程存在一个问题:当程序对以棋盘边角为中心的区域进行搜查时,会出现数组越界的情况. 对于这个

  • Micronaut框架的简单使用介绍

    什么是Micronaut Micronaut是一个基于JVM的框架,用于构建轻量级.模块化的应用程序.Micronaut是由创建Grails的同一家公司OCI开发的最新框架,旨在使创建微服务变得快速和简单. 虽然Micronaut包含一些类似于Spring等现有框架的特性,但它也有一些新特性使它与众不同.通过对Java.Groovy和Kotlin的支持,它提供了多种创建应用程序的方法. 主要特点 Micronaut最令人兴奋的特性之一是它的编译时依赖注入机制.大多数框架使用反射和代理在运行时执行

  • java实现手写一个简单版的线程池

    有些人可能对线程池比较陌生,并且更不熟悉线程池的工作原理.所以他们在使用线程的时候,多数情况下都是new Thread来实现多线程.但是,往往良好的多线程设计大多都是使用线程池来实现的. 为什么要使用线程 降低资源的消耗.降低线程创建和销毁的资源消耗.提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间提高线程的可管理性 下图所示为线程池的实现原理:调用方不断向线程池中提交任务:线程池中有一组线程,不断地从队列中取任务,这是一个典型的生产者-消费者模型. 要实现一

  • Java实现简单版贪吃蛇游戏

    本文实例为大家分享了Java实现简单版贪吃蛇游戏的具体代码,供大家参考,具体内容如下 这是一个比较简洁的小游戏,主要有三个类,一个主类,一个食物类,一个贪吃蛇类. 1.首先定义主类,主类中主要用来创建窗口 public class Main { public static final int WIDTH=600; public static final int HEIGHT=600; public static void main(String[] args) { JFrame win =new

随机推荐