AutoMapper在ABP框架中的使用说明

简介:

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

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

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

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

问:什么是AutoMapper?

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

问:什么情况下使用AutoMapper?

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

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

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

  View Code

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

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

  View Code

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

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

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

image

如图,新建一个类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类中添加配置文件类就可以了。




本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/4973910.html,如需转载请自行联系原作者


目录
相关文章
|
存储 缓存 算法
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
426 0
阿里云地域节点测试IP(国内+海外)Ping值延迟测试
阿里云地域节点遍布全球19个地区节点(国内+海外),共有56个可用区,哪个快网分享阿里云国内及海外节点测试IP,阿里云节点Ping值延迟测试: 阿里云节点全球无缝覆盖,提供CN2高速网络,BGP接入支持。
40113 0
|
存储 开发框架 前端开发
Abp源码分析之虚拟文件系统Volo.Abp.VirtualFileSystem
`Volo.Abp.VirtualFileSystem` 是 ABP 框架中的一个重要组件,提供了一种抽象文件系统的方式,使应用程序可以轻松访问和管理文件资源。本文介绍了如何在 MVC 项目中使用 `Volo.Abp.VirtualFileSystem`,包括新建项目、配置模块、添加资源文件以及读取资源文件的具体步骤。通过统一的接口处理文件和目录,无论实际存储位置如何,应用程序都能更加灵活地切换不同的文件存储方式。
220 0
Abp源码分析之虚拟文件系统Volo.Abp.VirtualFileSystem
|
网络协议 网络安全
ssl证书下载
【10月更文挑战第4天】ssl证书下载
555 3
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
318 0
|
JavaScript API 调度
深入理解Node.js事件循环及其在后端开发中的应用
【7月更文挑战第30天】本文旨在通过深入浅出的方式,解析Node.js事件循环机制的工作原理及其在后端开发中的实际应用。我们将从事件循环的基本概念出发,逐步探讨其与异步I/O操作的关系,以及如何利用事件循环优化后端性能和处理高并发请求。文章将结合实际案例,为读者提供清晰的认识和应用策略。
|
SQL API 数据库
揭开高效数据层构建的秘密武器:Entity Framework Core 分页查询的最佳实践与性能优化技巧全解析
【8月更文挑战第31天】本文以随笔形式详细探讨了如何在Entity Framework Core中实现分页查询的最佳实践。通过创建基于EF Core的项目,配置数据库上下文,并定义领域模型,文章展示了如何使用`Skip()`和`Take()`方法进行分页查询。此外,还介绍了如何使用惰性加载、显式加载和预加载来优化性能,并通过投影技术减少不必要的数据加载。最后,文章强调了分页查询对于提升应用性能和用户体验的重要性。
441 0
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之流水线构建出现问题,连接不到nuget,该如何处理
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
818 0