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

1.Repository层:

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

AA.Dapper升级了-LMLPHP

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

AA.Dapper升级了-LMLPHP

定义仓储类并且继承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);

});  

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

10-09 12:25