ASP.NET Core Web中使用AutoMapper进行对象映射

asp,net,core,web,automapper · 浏览次数 : 10

小编点评

**AutoMapper Mapping Profile** ```csharp using AutoMapper; using Entity; using Entity.ViewModel; namespace WebApi { public class AutoMapperMappingProfile : Profile { CreateMap(); } } ``` **用法:** 1. 在应用程序配置文件中注册 AutoMapper 服务。 2. 在控制器中使用 `CreateMap()` 方法进行对象映射。 **示例:** ```csharp // Configure AutoMapper mappings var mapper = AutoMapper.Mapper.CreateMapper(new AutoMapperMappingProfile()); // Map a list of students to a list of student view models var studentsListDto = mapper.Map, List>(students); ``` **其他信息:** * `CreateMap()` 方法可以从源类型创建目标类型。 * `Profile` 类可以包含多个映射规则。 * `IMapper` 接口用于创建和执行对象映射。 * `Student` 和 `StudentViewModel` 是示例实体类型。

正文

前言

在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射库就随之而出了,这些库可以自动完成对象之间的映射,从而减少大量的开发工作量,提高开发工作效率。今天我们来讲讲在ASP.NET Core Web中使用AutoMapper快速进行对象映射。

使用对象映射库有哪些好处?

  • 减少开发工作量,提高开发效率。
  • 减少开发过程中的错误和bug。
  • 简化代码结构,提高代码可读性和可维护性。

AutoMapper对象映射库介绍

AutoMapper是一个简单易用的.NET对象映射库,用于快速、方便地进行对象之间的转换和映射,极大的简化了开发人员在处理对象映射时的工作量。

安装AutoMapper NuGet包

在ASP.NET Core Web API项目中搜索:AutoMapper NuGet包安装。

创建源对象和目标对象

接下来我们分别定义一个源对象(Student)和一个目标对象(StudentViewModel)。

Student(源对象)

    public class Student
    {
        /// <summary>
        /// 学生ID [主键,自动递增]
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "学生ID")]
        public int StudentID { get; set; }

        /// <summary>
        /// 班级ID
        /// </summary>
        [Display(Name = "班级ID")]
        public int ClassID { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary>
        [Display(Name = "学生姓名")]
        public string Name { get; set; }

        /// <summary>
        /// 学生年龄
        /// </summary>
        [Display(Name = "学生年龄")]
        public int Age { get; set; }

        /// <summary>
        /// 学生性别
        /// </summary>
        [Display(Name = "学生性别")]
        public string Gender { get; set; }
    }

StudentViewModel(目标对象)

    public class StudentViewModel
    {
        /// <summary>
        /// 学生ID [主键,自动递增]
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "学生ID")]
        public int StudentID { get; set; }

        /// <summary>
        /// 班级ID
        /// </summary>
        [Display(Name = "班级ID")]
        public int ClassID { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary>
        [Display(Name = "学生姓名")]
        public string Name { get; set; }

        /// <summary>
        /// 学生年龄
        /// </summary>
        [Display(Name = "学生年龄")]
        public int Age { get; set; }

        /// <summary>
        /// 学生性别
        /// </summary>
        [Display(Name = "学生性别")]
        public string Gender { get; set; }

        /// <summary>
        /// 班级名称
        /// </summary>
        [Display(Name = "班级名称")]
        public string ClassName { get; set; }
    }

配置AutoMapper映射规则

我们可以定义一个AutoMapperMappingProfile的映射配置文件,并在其中定义源类型和目标类型之间的映射关系。

using AutoMapper;
using Entity;
using Entity.ViewModel;

namespace WebApi
{
    /// <summary>
    /// AutoMapper映射配置文件
    /// </summary>
    public class AutoMapperMappingProfile : Profile
    {
        /// <summary>
        /// 添加映射规则
        /// </summary>
        public AutoMapperMappingProfile()
        {
            CreateMap<Student, StudentViewModel>();
        }
    }
}

Program中注册AutoMapper服务

使用AddAutoMapper()方法可以将AutoMapper所需的服务添加到该集合中,以便在应用程序的其他部分中使用。该方法需要传入一个Assembly数组,以告诉AutoMapper要扫描哪些程序集来查找映射配置(在当前作用域的所有程序集里面扫描AutoMapper的配置文件)。

        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            builder.Services.AddControllers();

            //添加 AutoMapper 的配置
            //使用AddAutoMapper()方法可以将AutoMapper所需的服务添加到该集合中,以便在应用程序的其他部分中使用。
            //该方法需要传入一个Assembly数组,以告诉AutoMapper要扫描哪些程序集来查找映射配置(在当前作用域的所有程序集里面扫描AutoMapper的配置文件)。
            builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

        }

进行对象映射操作

依赖注入获取IMapper接口的实例

    /// <summary>
    /// 学生管理
    /// </summary>
    [ApiController]
    [Route("api/[controller]/[action]")]
    public class StudentController : ControllerBase
    {
        private readonly IMapper _mapper;

        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="mapper">mapper</param>
        public StudentController(IMapper mapper)
        {
            _mapper = mapper;
        }
    }

进行对象映射操作

接下来我们使用使用IMapper接口的Map方法来进行对象映射操作。

var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);

映射结果输出

完整示例源代码

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👨‍👩‍👦

与ASP.NET Core Web中使用AutoMapper进行对象映射相似的内容:

ASP.NET Core Web中使用AutoMapper进行对象映射

前言 在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射库就随之而出了,这些库可以自动完成对象之间的映射,从而减少大量的开发工作量,提高开发工

WatchDog:一款.NET开源的实时应用监控系统

项目介绍 WatchDog是一个开源(MIT License)、免费、针对ASP.Net Core Web应用程序和API的实时应用监控系统。开发者可以实时记录和查看他们的应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常。 项目工作原理 它利用SignalR进行实时监控,并使用Lit

Visual Studio Code调试和发布ASP.NET Core Web应用

前言 上一篇文章主要讲了Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用有兴趣的同学可以去看看,今天咱们主要是要讲讲如何在VS Code中调试和发布ASP.NET Core Web应用。 Visual Studio Code安装C#开发工具包并编写AS

在 WPF 中集成 ASP.NET Core 和 WebView2 用于集成 SPA 应用

背景 我们有些工具在 Web 版中已经有了很好的实践,而在 WPF 中重新开发也是一种费时费力的操作,那么直接集成则是最省事省力的方法了。 修改项目文件 我们首先修改项目文件,让 WPF 项目可以包含 ASP.NET Core 的库,以及引用 WebView2 控件。

[翻译].NET 8 的原生AOT及高性能Web开发中的应用[附性能测试结果]

随着 .NET 8 的发布,微软迈出了重要一步,为 ASP.NET Core 引入了原生的 Ahead-of-Time (AOT) 编译。这一进步不仅提高了应用程序的性能,还简化了开发过程,标志着 .NET 生态系统进入了新的时代。

ASP.NET Core实时库SignalR简单应用

## 一、什么是SignalR: **SignalR** 是用于构建需要实时用户交互或实时数据更新的Web 应用程序的一个开放源代码.NET 库。不仅仅用在Web应用中,后面会讲到它的应用范围。它简化了简化了构建实时应用程序的过程,包括**ASP.NET Server**库和**JavaScript

Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用

前言 前段时间微软发布了适用于VS Code的C#开发工具包(注意目前该包还属于预发布状态但是可以正常使用),因为之前看过网上的一些使用VS Code搭建.NET Core环境的教程看着还挺复杂的就一直没有尝试使用VS Code来编写.NET Core。不过听说C# 开发工具包提供了一系列功能和扩展

Asp-Net-Core开发笔记:API版本管理

## 前言 对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求。事实上,Web API应用程序应该从创建时就考虑到API版本的问题。业务的调整、功能的增加、接口的移除与改名、接口参数变动、实体属性的添加、删除和更改等都会改变API的功能,从而带来版本的变更

全面的ASP.NET Core Blazor简介和快速入门

前言 因为咱们的MongoDB入门到实战教程Web端准备使用Blazor来作为前端展示UI,本篇文章主要是介绍Blazor是一个怎样的Web UI框架,其优势和特点在哪?并带你快速入门上手ASP.NET Core Blazor(当然这个前提是你要有一定的C#编程基础的情况,假如你完全没有接触过C#的

【ASP.NET Core】修改Blazor.Server的Hub地址后引发的问题

Blazor Server,即运行在服务器上的 Blazor 应用程序,它的优点是应用程序在首次运行时,客户端不需要下载运行时。但它的代码是在服务器上执行的,然后通过 SignalR 通信来更新客户端的 UI,所以它要求必须建立 Web Socket 连接。 用于 Blazor 应用的 Signal