AA.Dapper升級了

李明成發表於2020-10-09

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

相關文章