zoukankan      html  css  js  c++  java
  • AA.Dapper升级了

    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

  • 相关阅读:
    Codeforces 712B. Memory and Trident
    Codeforces 712A. Memory and Crow
    kkb --- webpack实战
    前端性能优化
    前端防抖
    css面试题
    七、服务端渲染 ---kkb
    数据结构与算法(位运算)
    数据结构与算法(栈、队列、链表)
    vue-cli 配置项以及请求的封装
  • 原文地址:https://www.cnblogs.com/chengtian/p/13784015.html
Copyright © 2011-2022 走看看