AutoMapper在ABP框架中的使用说明

为了说明AutoMapper如何使用,我专门开设了一个专题来讲,如果您还没有查看该专题,请点击这里。既然系统地学习了AutoMapper,那么接下来就是该用它实战的时候了。今天,我们就来揭开AutoMapper如何在ABP框架中使用的面纱。

因为这里演示的是用ABP框架搭建的项目,本博客的讲解的前提是假设你有了ABP基础,所以,如果您还不了解ABP框架,请查看我的ABP框架的系列博客,请点击这里

下面正式开始今天的讲解。

首先,让我们稍微回忆一下AutoMapper的知识点。

问:什么是AutoMapper?

答:AutoMapper翻译过来就是“自动映射工具”。它的作用就是将一个源类型映射成一个目标类型,比如Person——>PersonDto,User——>UserDto。

问:什么情况下使用AutoMapper?

答:一般在项目的开发中,经常需要将Entity实体映射成ModelDto或者ViewModel,这个时候,使用AutoMapper仅需要简单的配置,就可以实现这些需求,非常方便。

接下来,讲一下项目中的具体配置。

在我的ABP项目中,首先核心层有一个实体类TerminalDevices,类定义如下:

 

可以看到,仅一个实体类,就要将近300行的代码,但是在服务层或者展现层使用的时候,有些属性是不需要的,所以这时我们就要定义我们的Dto类了。

随后,我在ABP项目中的服务层定义了一个对应的TerminalDeviceDto类,定义如下:

当然,这里的Dto类定义的属性跟你的具体业务相关,定义的属性还可能更少。

上面讲的是源类型和目标类型的定义,下面开始讲它们之间的映射配置。

首先,我在应用服务层新建一个文件夹取名“AutoMapper”,里面放跟AutoMapper配置相关的东西。

如图,新建一个类TerminalDeviceProfile(CityProfile类是我的另一个实体类对应的AutoMapper配置文件),定义如下:

namespace Noah.ChargeStation.Application.AutoMapper
{
public class CityProfile:Profile
{
protected override void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Cities, CityDto>();
});
}
}
}

如果您对这么配置不清楚原因,请查看我的AutoMapper系列教程,点击查看

再创建一个AutoMapperWebConfig静态类,定义如下:

namespace Noah.ChargeStation.Application.AutoMapper
{
public static class AutoMapperWebConfig
{
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<CityProfile>();
cfg.AddProfile<TerminalDeviceProfile>();
});
Mapper.AssertConfigurationIsValid();//验证所有的映射配置是否都正常
}
}
}

接下来,在应用服务层的模块类中调用该静态类的静态方法,加载所有的AutoMapper配置信息。

namespace Noah.ChargeStation.Application
{
[DependsOn(typeof(ChargeStationCoreModule), typeof(AbpAutoMapperModule))]
public class ChargeStationApplicationModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
AutoMapperWebConfig.Configure();//一次性加载所有映射配置
}
}
}

这里需要注意的是,AutoMapper的配置一般放在项目启动的时候进行加载且只加载一次就够了,而在ABP框架搭建的项目中,除了展现层(Web和WebAPI层),其他层都会有一个Module类(类名以Module结尾)。这些类都重写了父类AbpModule的Initialize方法,旨在模块初始化的时候调用,这样,映射的配置也在模块初始化的时候完成了。如果在一般的ASP.Net项目中,应该在全局配置文件Global.asax中的Application_Start方法中调用AutoMapper的配置方法,其他项目类似。

以后,想要添加配置信息时,只需要定义相应的XXProfile类,然后在AutoMapperWebConfig类中添加配置文件类就可以了。

如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!欢迎大家加入QQ群交流:365987756
作者:tkb至简

AutoMapper在ABP框架的更多相关文章

  1. AutoMapper在ABP框架中的使用说明

    为了说明AutoMapper如何使用,我专门开设了一个专题来讲,如果您还没有查看该专题,请点击这里.既然系统地学习了AutoMapper,那么接下来就是该用它实战的时候了.今天,我们就来揭开AutoM ...

  2. [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序

    本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...

  3. ABP框架个人开发实战(1)_环境搭建

    前言 之前关注ABP框架有一阵子了,一直没有潜下心来实际研究一下.最近想自己建站,以后有自己的功能开发项目,可以在自己的站点上开发,并一步步的完善,所以找个比较好用的框架迫在眉睫,选来选去,决定用AB ...

  4. ABP框架 - 我的第一个Web API

    本文示例源代码地址https://github.com/lcyhjx/abp-training 上一篇我们已经对ABP是什么,能做什么.有了一个印象.那么接下来我们将动手使用ABP框架快速开发一个AP ...

  5. 【ABP框架系列学习】介绍篇(1)

      0.引言 该系列博文主要在[官方文档]及[tkbSimplest]ABP框架理论研究系列博文的基础上进行总结的,或许大家会质问,别人都已经翻译过了,这不是多此一举吗?原因如下: 1.[tkbSim ...

  6. 一、ABP框架框架摘要

    ABP框架几点说明: 一.什么是ABP ABP是一个建立在最新的ASP.NET的MVC和Web API技术的应用框架.它可以很容易地使用依赖注入.日志记录.验证.异常处理.本地化等,也使用流行的框架和 ...

  7. ABP 框架 数据库底层迁移 Mysql 集群

    技术交流,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 背景 笔者 目前架构的IOT 项目是使用abp 框架作为后台, ...

  8. 基于ASP.NET MVC的ABP框架入门学习教程

    为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...

  9. ABP 框架代码批量生成器

    需要最新源码,或技术提问,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 简介 用abp 框架快两年了,用它完成了多个项 ...

随机推荐

  1. 单片机实验: 三轴磁场模块 GY-271

    最近买了一块三轴磁场模块进行实验 名称:HMC5883L模块(三轴磁场模块) 型号:GY-271 使用芯片:HMC5883L 供电电源:3-5v 通信方式:IIC通信协议 测量范围:±1.3-8 高斯 ...

  2. xcode中找不到XXX.dylib

    xcode中找不到 XXX.dylib 了,比如libz.tbd 如果要用到 libz.dylib,可以用下面的办法,来自 Stack Overflow. Go to Build Phases > ...

  3. C#的百度地图开发(二)转换JSON数据为相应的类

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  4. WPF自定义ListBox样式

    <!--竖向--> <Style x:Key="ListBoxStyle1" TargetType="{x:Type ListBox}"> ...

  5. Python做的眼睛护士

    搞了两天终于搞定了,虽然还存在一点点小问题(窗口的显示位置应该设在(0,0)).但基本可以用了. 代码分两个部分.主界面和遮挡屏幕界面.主界面设置完时间后调用遮挡屏幕界面. 1.主界面(设置 工作时间 ...

  6. eclipse failed to create the java virtual machine 问题图文解析(转)

    clipse failed to create  the java virtual  machine 解决方法: 1.问题现象 2.java虚拟机初始化失败!寻找eclipse解压路径 3.寻找ecl ...

  7. HDU 3830 Checkers

    意甲冠军: 有三件  所有其他棋子可以跳  不能分开的两个跳跃  当被问及状态u为了国家v最低短跳转 思路: 对于一个状态三个棋子的位置能够设为 x y z  (小到大) 仅仅有当y-x=z-y的时候 ...

  8. SVN基于Maven的Web项目更新,本地过程详细解释

    周围环境 MyEclipse:10.7 Maven:3.1.1 概要 最近在做项目,MyEclipse下载SVN基于上述Maven的Web问题,有时候搞了非常半天,Maven项目还是出现叉号,最后总结 ...

  9. 用Javascript评估用户输入密码的强度(Knockout版)

    原文:用Javascript评估用户输入密码的强度(Knockout版) 早上看到博友6点多发的一篇关于密码强度的文章(连接),甚是感动(周末大早上还来发文). 我们来看看如果使用Knockout更简 ...

  10. java 类 及其 执行过程

    java 类 命名 java类文件中  只能有一个公开类  且 公开类类名与当前类文件的文件名一致 方法如果使用了static修饰,那么此方法是类方法,可以 类名.方法名 使用. 你的main方法在同 ...