前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AA.Dapper升级了

AA.Dapper升级了

作者头像
李明成
发布2020-10-09 19:50:55
6780
发布2020-10-09 19:50:55
举报
文章被收录于专栏:dotNET知音dotNET知音

AA.Dapper如何使用

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

1.Repository层:

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

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

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

代码语言:javascript
复制
public class UserRoleRepository:DapperRepository<UserRole>, IUserRoleRepository { }

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

代码语言:javascript
复制
int GetUserCount();

在UserRepository中实现

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

2.ApplicationServce层

(1)新增

代码语言:javascript
复制
_userRepository.Insert(entityUser);  

(2)修改

代码语言:javascript
复制
var entity = _userRepository.Get(input.SysNo);  
entity.Status = 320;  
_userRepository.Update(entity);  

(3)删除

代码语言:javascript
复制
 var entity = _userRepository.Get(input.SysNo);  
_userRepository.Delete(entity);  

(4)查询

代码语言:javascript
复制
//通过主键获取单个实体 
_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)事务

代码语言:javascript
复制
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 如以下代码

代码语言:javascript
复制
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。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-08,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 dotNET知音 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Repository层:
  • 2.ApplicationServce层
    • (1)新增
      • (2)修改
        • (3)删除
          • (4)查询
            • (5)事务
              • (6)动态Expression
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com