代码改变世界

AA.Dapper升级了

2020-10-09 09:04 by 李明成, 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

RabbitMq如何确保消息不丢失

2020-09-29 14:58 by 李明成, 1481 阅读, 1 推荐, 收藏, 编辑
摘要:上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛的事情。网络故障、服务器重启、硬盘损坏等都会导致消息的丢失。消息从生产到消费主要结果以下几个阶段如下图。 ①生产阶段,生产者创建消息,经过网络发送到rabbit服务器 ②消息存储阶段,首先被发送到交换器然后经过路 阅读全文

掌握Rabbitmq几个重要概念,从一条消息说起

2020-09-17 13:23 by 李明成, 1103 阅读, 4 推荐, 收藏, 编辑
摘要:RabbitMQ 是功能强大的开源消息代理。根据官网称:也是使用量最广泛的消息队列。就像他的口号“Messaging that just works”,开箱即用使用简单,支持多种消息传输协议(AMQP、STOMP、MQTT)。 一个应用程序或者服务如何使用RabbitMq呢? 首先会有生产者和消费者 阅读全文

.NET Core微服务开发服务间调用篇-GRPC

2020-07-16 09:20 by 李明成, 4072 阅读, 8 推荐, 收藏, 编辑
摘要:在单体应用中,相互调用都是在一个进程内部调用,也就是说调用发生在本机内部,因此也被叫做本地方法调用;在微服务中,服务之间调用就变得比较复杂,需要跨网络调用,他们之间的调用相对于与本地方法调用,可称为远程过程调用,简称RPC(Remote procedure call)。 看过上篇API网关篇,知道案 阅读全文

.NET Core微服务开发网关篇-ocelot

2020-07-15 16:28 by 李明成, 1589 阅读, 6 推荐, 收藏, 编辑
摘要:通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore.ProductCatalog.Api) 添加一个ProductController [Route( 阅读全文

刷新.NET

2019-12-18 17:14 by 李明成, 2481 阅读, 10 推荐, 收藏, 编辑
摘要:.NET Core 发布的那一天起,它在完成自我刷新的过程,一切为了适应未来,云原生。不仅仅跨平台那么简单。 .NET Core 未来发展路线 我们发现跳过了.NET Core 4.X 避免了和目前.NET Framework4.X命名上的混乱,明年直接命名为了.NET 5 , 默认还是core,不 阅读全文

(译)An introduction to Kubernetes

2019-12-14 10:21 by 李明成, 1240 阅读, 15 推荐, 收藏, 编辑
摘要:原文:https://www.jeremyjordan.me/kubernetes/(博客园团队推荐的) 这篇博客文章将对Kubernetes进行介绍,以便您了解该工具背后的动机,含义以及使用方式。在后续文章中,我将讨论如何使用更具体的(数据科学)示例来利用Kubernetes增强数据科学工作负载。 阅读全文

一文了解Nuget的使用

2019-12-10 09:20 by 李明成, 2852 阅读, 4 推荐, 收藏, 编辑
摘要:Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费)。NuGet客户端工具提供了生成和使用软件包的能力。NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库。 简单来说,nuget包解决了dll引用的问题,开发者可以通过打包,然后发布到公有主机或者私有主机上, 阅读全文

.NET Core应用框架AA介绍(二)

2019-12-05 10:07 by 李明成, 3672 阅读, 17 推荐, 收藏, 编辑
摘要:AA的开源地址 https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架,是建立在众多大家熟知的流行工具之上并与之集成。比如:ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis 阅读全文

.NET Core 3.0 使用Nswag生成Api文档和客户端代码

2019-11-28 09:29 by 李明成, 4549 阅读, 9 推荐, 收藏, 编辑
摘要:摘要 在前后端分离、Restful API盛行的年代,完美的接口文档,成了交流的纽带。在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化。下文将会演示 利用Nswag如何生成Api文档 利用NSwagStudio如何生成客户端代码,并且进行测试 什么是 Sw 阅读全文
点击右上角即可分享
微信分享提示