AA.Dapper升级了
2020-10-09 09:04 李明成 阅读(1080) 评论(4) 编辑 收藏 举报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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?