AA.Dapper基于dapper进一步封装而成的orm框架,提供增删改查、分页、事务、原生sql的功能,以满足日常的业务开发。

1.Repository层:

DapperRepository类包含大部分数据库操作如图:

DapperContext.Current.DataBase类支持原生sql,Execute(执行非查询命令对象的sql并返回受影响的行数)、ExecuteScalar(返回select结果集中的第一行第一列)、Query(执行查询sql,并返回结果)

定义仓储类并且继承DapperRepository,如以下代码

public class UserRoleRepository:DapperRepository<UserRole>, IUserRoleRepository { }

如果有需要原生sql的需求,在IUserRepository接口中添加定义

int GetUserCount();

在UserRepository中实现

public class UserRepository : DapperRepository<User>, IUserRepository  
    {  
  
        public int GetUserCount()  
        {  
            return DapperContext.Current.DataBase.ExecuteScalar<int>("select count(*) from Sys_UserInfo");  
        }  
}  

2.ApplicationServce层

(1)新增

_userRepository.Insert(entityUser);  

(2)修改

var entity = _userRepository.Get(input.SysNo);  

entity.Status = 320;  

_userRepository.Update(entity);   

(3)删除

 var entity = _userRepository.Get(input.SysNo);  

_userRepository.Delete(entity);  

(4)查询

//通过主键获取单个实体  

_userRepository.Get(input.SysNo);  

//通过Expression条件获取  

_userRepository.Select(x => x.SysNo == input.SysNo);  

//分页  

var result = _userRepository.From(sql =>  

            {  

                sql.Select()  

                   .Where(x=>x.UserName==input.UserName)  

                   .Page(input.PageIndex, input.PageSize);  

            });   

(5)事务

using (var dbTransaction = dapperContext.BeginTransaction())  

 {  

     try  

     {  

         var user = new UserInfo()  

         {  

             UserName = "chengTian",  

             RealName = "成天",  

             GmtCreate = DateTime.Now,  

             GmtModified = DateTime.Now,  

             LastLoginDate = DateTime.Now  

         };  

         userInfoRepository.Insert(user);  

         userAlbumRepository.Insert(new UserAlbum  

         {  

             Pic = "image/one.jgp"  

         });  

         dapperContext.Commit();  

     }  

     catch (Exception ex)  

     {  

         dbTransaction.Rollback();  

     }  

 }   

(6)动态Expression

删除、查询条件需要根据传入的参数判断使用DynamicWhereExpression动态构造Expression 如一下代码

var where = DynamicWhereExpression.Init<User>();  

if (input.RealName != "")  

{  

   where = where.And(x => x.RealName.Contains(input.RealName));  

}  

if (input.SysNo!=Guid.Empty)   

{  

    where = where.And(x=>x.SysNo==input.SysNo);  

}  

if (input.SysNos.Any())   

{  

    where = where.And(x=>input.SysNos.Contains(x.SysNo));  

}  

var result = _userRepository.From(sql =>  

{  

    sql.Select()  

       .Where(where)  

       .Page(input.PageIndex, input.PageSize);  

});  

https://github.com/ChengLab/AAFrameWork

源码地址

用起来还是很顺手的,目前比较成熟也很多,不过AA.Dapper不是全新的轮子,只是进一步的封装,有了Ef的便捷性。你可以hold住的orm,代码可以任意扩展,只要你熟悉dapper。喜欢.NetCore的童鞋们,可以进微信群,加微信(备注加群):qinzhong45

AA.Dapper升级了的更多相关文章

  1. .Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  2. 非关系型数据库来了,CRL快速开发框架升级到版本4

    轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...

  3. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

  4. Dapper入门学习

    今天了解并学习了下Dapper的用法,这里简单介绍下 1.安装Nuget Dapper Package包 2.代码 using (IDbConnection connection = new SqlC ...

  5. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  6. Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

    接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理. 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下 ...

  7. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  8. [android] SQLite 数据库的升级 和 降级

    public class SqliteHelp extends SQLiteOpenHelper { /* * context:创建数据库所需的 上下文对象 * name: 数据库名字 * facto ...

  9. nginx 平滑升级tengine

    wget  http://tengine.taobao.org/download/tengine-1.5.1.tar.gz //下载Tengine1.5.1版本 tar zxvf tengine-1. ...

随机推荐

  1. Cross-Site Scripting: Reflected

    首先贴解决办法吧,解决了我项目中的问题,不一定适用所有情况. //For Cross-Site Scripting: Reflected public static String filter(Str ...

  2. The Data Warehouse Toolkit 阅读笔记

    前言 这篇笔记的主要内容来至于The Data Warehouse Toolkit,该书可以称为数仓建模的圣经 什么是星型模型 以一个业务实时为主表.比如一笔订单就是一个业务事实.订单有商品的SKU信 ...

  3. Python 利用三个简易模块熟悉前后端交互流程

    准备工作 在学习Django之前,先动手撸一个简单的WEB框架来熟悉一下前后端交互的整体流程 本次用到的模块: 1.wsgiref,这是一个Python自带的模块,用于构建路由与视图 2.pymysq ...

  4. 6 vue-element.ui 左侧导航栏

    <template> <div> <el-menu :default-active="'/'+activeIndex2" mode="ver ...

  5. Eclipse中java文件边的黄色数据库标志变成了蓝色小勾,导致文件修改后无法显示在Git staging窗口中,修改无法提交,怎么解决?

    出现这个问题的原因是误点击了右键点文件->Team->Advanced->Assume Unchanged, 导致结果是文件修改了无法显示在Git staging窗口中,自然无法提交 ...

  6. Mybatis-解决属性名和字段名不一致的问题

    解决属性名和字段名不一致的问题 目录 解决属性名和字段名不一致的问题 1. 问题 2. ResultMap 1. 问题 在数据库中,密码字段为pwd,而在实体类中为password package c ...

  7. Linux:系统用户和用户组

    一.用户介绍 用户分为三类,超级用户.虚拟用户.普通用户:系统通过用户的uid识别用户:超级用户uid=0,虚拟用户uid=1-599,普通用户的uid=500-65535 用户和组相关配置文件/et ...

  8. [翻译] 发布双屏预览SKD,公布MICROSOFT 365开发者日日期

    [前置提示]:本文翻译工作尚未完工,您可以先看原文QUQ 原文标题:Announcing dual-screen preview SDKs and Microsoft 365 Developer Da ...

  9. python3和python2语法区别

    1.print python2中是print xxx python3中是print(xxx) 2.抛异常except python2中except Exception,e: print "E ...

  10. linux 多进程

    Linux下的多进程编程初步 Linux下的多进程编程初步 多进程编程 1 Linux下进程的结构 2 Linux下的进程控制 21 僵尸进程 22 fork 23 exec 函数族 3 Linux下 ...