之前,一直想集成Dapper到项目中,但是一直没成功,今天把abp升级到最新版,然后按教程来,就可以了,呵呵

    现在,基于上一篇的源码进行升级和集成dapper,将abp升级到3.8.2

   官方升级文档:https://github.com/ABPFrameWorkGroup/AbpDocument2Chinese/blob/master/Markdown/Abp/9.5ABP%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E5%B1%82-%E9%9B%86%E6%88%90Dapper.md

一、注册Module

  首先,你要在Module类上添加 DependsOn 特性,并且使用 AbpDapperModule 作为传入参数。依赖关系的先后顺序 AbpDapperModule 依赖应该在 EF Core依赖之后。

  修改ZmBlog.Infrastructure的ZmBlogDataModule 如下:

namespace ZmBlog.EntityFramework
{
[DependsOn(typeof(ZmBlogCoreModule), typeof(AbpEntityFrameworkModule), typeof(AbpDapperModule))]
public class ZmBlogDataModule : AbpModule
{
public override void PreInitialize()
{
Database.SetInitializer(new CreateDatabaseIfNotExists<ZmBlogDbContext>()); Configuration.DefaultNameOrConnectionString = "DefaultConnection";
} public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); DapperExtensions.DapperExtensions.SetMappingAssemblies(new List<Assembly> { typeof(ZmBlogDataModule).GetAssembly() });
}
}
}

二、配置实体与表的映射

  和ef一样,需要配置映射关系

public class PersonMapper : ClassMapper<Category>
{
public PersonMapper()
{
Table("Categories");
AutoMap();
}
}

PS: 如果同时使用ef,它的映射最好使用ToTable指定表名,不然ef会自动转换最后一个单词为复数

三、使用

  1.在应用层使用

     private readonly IRepository<Category, string> _categoryRepository;
private readonly IDapperRepository<Category, string> _categoryDapperRepository;
private readonly ICategoryDapperRepository _categoryDapperRepo; public CategoryApp(IRepository<Category, string> categoryRepository, IDapperRepository<Category, string> categoryDapperRepository, ICategoryDapperRepository categoryDapperRepository2)
{
_categoryRepository = categoryRepository;
_categoryDapperRepository = categoryDapperRepository;
_categoryDapperRepo = categoryDapperRepository2;
}

  2.DapperRepository的封装

  封装的仓储基类

namespace ZmBlog.EntityFramework.EntityFramework.DapperRepositories
{
public abstract class DapperRepository<TEntity, TPrimaryKey> : DapperEfRepositoryBase<ZmBlogDbContext, TEntity, TPrimaryKey> where TEntity : class, IEntity<TPrimaryKey>
{
public DapperRepository(IActiveTransactionProvider activeTransactionProvider) : base(activeTransactionProvider)
{
}
} public abstract class DapperRepository<TEntity> : DapperEfRepositoryBase<ZmBlogDbContext, TEntity, string> where TEntity : class, IEntity<string>
{
public DapperRepository(IActiveTransactionProvider activeTransactionProvider) : base(activeTransactionProvider)
{
}
}
}

  定义仓储接口和实现

//领域层
public interface ICategoryDapperRepository : IDapperRepository<Category, string>
{
}
//基础设施层
public class CategoryDapperRepository : DapperRepository<Category, string>, ICategoryDapperRepository
{
public CategoryDapperRepository(IActiveTransactionProvider activeTransactionProvider) : base(activeTransactionProvider)
{
}
}

ABP架构学习系列四:集成Dapper的更多相关文章

  1. ABP架构学习系列一 整体项目结构及目录

    本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zha ...

  2. ABP架构学习系列

    ABP实践学习系列 ABP Zero 本地化语言的初始化和扩展 ABP Zero 导航菜单之角色权限 ABP Zero示例项目问题总结  ABP后台服务之作业调度Quartz.NET   ABP架构学 ...

  3. ABP架构学习系列三:手工搭建ABP框架

    由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC.AOP.ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么多时间让人去慢 ...

  4. ABP架构学习系列二:ABP中配置的注册和初始化

    一.手工搭建平台 1.创建项目 创建MVC5项目,手动引入Abp.Abp.Web.Abp.Web.Mvc.Abp.Web.Api 使用nuget添加Newtonsoft.Json.Castle.Cor ...

  5. scrapy爬虫学习系列四:portia的学习入门

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  6. DocX开源WORD操作组件的学习系列四

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  7. .net reactor 学习系列(四)---.net reactor应用场景

    原文:.net reactor 学习系列(四)---.net reactor应用场景         前面已经学习了.net reactor一些基础知识,现在准备学习下实际的应用场景,只是简单的保护和 ...

  8. Identity Server4学习系列四之用户名密码获得访问令牌

    1.简介 Identity Server4支持用户名密码模式,允许调用客户端使用用户名密码来获得访问Api资源(遵循Auth 2.0协议)的Access Token,MS可能考虑兼容老的系统,实现了这 ...

  9. RabbitMQ学习系列四-EasyNetQ文档跟进式学习与实践

    EasyNetQ文档跟进式学习与实践 https://www.cnblogs.com/DjlNet/p/7603554.html 这里可能有人要问了,为什么不使用官方的nuget包呐:RabbitMQ ...

随机推荐

  1. Servlet开发笔记(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  2. c# 串口SerialPort

    创建SerialPortFun类 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  3. php函数 array_count_values

    (PHP 4, PHP 5, PHP 7) array_count_values — 统计数组中所有的值 array_count_values ( array $array ) : array arr ...

  4. 极简Python DeBug工具——PySnooper

    DeBug Python 代码的方式有很多种?比如: (1)设置断点 (2)print函数 (3)... 本文要介绍的是一个新开源的项目PySnooper ,只要给有疑问的代码加上装饰器,各种信息一目 ...

  5. AI佳作解读系列(四)——数据增强篇

    前言 在深度学习的应用过程中,数据的重要性不言而喻.继上篇介绍了数据合成(个人认为其在某种程度上可被看成一种数据增强方法)这个主题后,本篇聚焦于数据增强来介绍几篇杰作! (1)NanoNets : H ...

  6. element vue 表格编辑

    https://xuliangzhan.github.io/vue-element-extends/#/editable/click1

  7. springdata 一对多配置

  8. Linux keepalived工作原理

    keepalived简介与工作原理 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他 ...

  9. 你需要Mobx还是Redux?

    在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法.是不是因为已经 ...

  10. SQL随记(五)——函数篇

    1.SQL函数: (1)replace(String1,String2,String3):从String1字符串中找到String2,然后用String3替换String2 如:replace('ab ...