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