当前位置: 首页 > news >正文

在 C# 中使用 AutoMapper 进行对象映射

在 C# 中使用 AutoMapper 进行对象映射

AutoMapper 是一个对象到对象映射的库,可以简化 DTO (Data Transfer Objects) 和实体类之间的转换。在大型应用程序中,通常需要将业务实体映射到视图模型或 DTO 中,这样可以减少代码的重复性并提高可维护性。本文将详细介绍如何在 C# 项目中使用 AutoMapper,包括安装、配置、以及示例代码。

一、安装 AutoMapper

首先,需要在项目中安装 AutoMapper,可以使用 NuGet Package Manager 进行安装。

在 Visual Studio 中打开 NuGet 包管理控制台,然后运行以下命令:

Install-Package AutoMapper

或者通过 NuGet 管理器搜索 AutoMapper 并进行安装。

二、配置 AutoMapper

安装完成后,需要配置 AutoMapper。通常在应用程序启动时配置,可以在 ASP.NET Core 的 Startup 类中配置,或在普通的控制台应用程序的入口处配置。

  1. 定义模型和 DTO

    让我们首先定义一个简单的模型类和对应的 DTO 类。

    public class User
    {public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public DateTime DateOfBirth { get; set; }
    }public class UserDto
    {public int Id { get; set; }public string FullName { get; set; }public int Age { get; set; }
    }
    
  2. 创建映射配置

    接下来,我们需要配置对象之间的映射关系。在 ASP.NET Core 项目中,可以在 Startup.cs 文件中进行配置。在控制台应用程序中,可以在 Main 方法中进行配置。

    using AutoMapper;
    using System;public class AutoMapperProfile : Profile
    {public AutoMapperProfile(){// 配置映射关系CreateMap<User, UserDto>().ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}")).ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));}
    }
    

    在上面的代码中,我们定义了一个 AutoMapperProfile 类,它继承自 Profile,并在构造函数中配置了 UserUserDto 之间的映射关系。

  3. 初始化 AutoMapper

    然后,我们需要在应用程序启动时初始化 AutoMapper。

    在 ASP.NET Core 中,可以在 Startup.cs 中配置:

    public class Startup
    {public void ConfigureServices(IServiceCollection services){services.AddAutoMapper(typeof(Startup));}
    }
    

    在控制台应用程序中,可以在 Main 方法中初始化:

    class Program
    {static void Main(string[] args){var config = new MapperConfiguration(cfg =>{cfg.AddProfile<AutoMapperProfile>();});IMapper mapper = config.CreateMapper();// 测试映射var user = new User{Id = 1,FirstName = "John",LastName = "Doe",DateOfBirth = new DateTime(1990, 1, 1)};var userDto = mapper.Map<UserDto>(user);Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");}
    }
    

    在上面的代码中,我们创建了 MapperConfiguration 并添加了我们刚才创建的 AutoMapperProfile。然后,通过 CreateMapper 方法创建一个 IMapper 实例,并使用它来执行映射操作。

三、使用 AutoMapper

有了上述配置后,就可以使用 AutoMapper 进行对象映射了。以下是一个简单的示例:

var user = new User
{Id = 1,FirstName = "John",LastName = "Doe",DateOfBirth = new DateTime(1990, 1, 1)
};var userDto = mapper.Map<UserDto>(user);Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");

运行该代码后,将输出:

Id: 1, FullName: John Doe, Age: 34

AutoMapper 自动将 User 对象映射到 UserDto 对象,并且根据配置生成了 FullNameAge 的值。

四、总结

通过以上示例,您已经学习了如何在 C# 中使用 AutoMapper 进行对象映射。AutoMapper 是一个非常强大的工具,它可以减少手动编写映射代码的工作量,特别是在复杂项目中更是如此。希望本文对您有所帮助!

完整代码示例:

using AutoMapper;
using System;public class User
{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public DateTime DateOfBirth { get; set; }
}public class UserDto
{public int Id { get; set; }public string FullName { get; set; }public int Age { get; set; }
}public class AutoMapperProfile : Profile
{public AutoMapperProfile(){CreateMap<User, UserDto>().ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}")).ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));}
}class Program
{static void Main(string[] args){var config = new MapperConfiguration(cfg =>{cfg.AddProfile<AutoMapperProfile>();});IMapper mapper = config.CreateMapper();var user = new User{Id = 1,FirstName = "John",LastName = "Doe",DateOfBirth = new DateTime(1990, 1, 1)};var userDto = mapper.Map<UserDto>(user);Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");}
}

这段代码可以直接复制到您的项目中并运行,帮助您快速掌握 AutoMapper 的使用。


http://www.mrgr.cn/news/675.html

相关文章:

  • C++第十一弹 -- STL之List的剖析与使用
  • 通过kuboard界面配置ingress
  • 使用 onBeforeRouteLeave 组合式函数提升应用的用户体验
  • 结合GPT与Python实现端口检测工具(含多线程)
  • 【计算机网络】CIDR无分类编址知识学习
  • HarmonyOS开发案例:创建全局自定义组件复用池-BuilderNode
  • 好知网教育教务管理平台的设计与实现(论文+源码)_kaic
  • 怎样才算精通 Excel?
  • vue3 withDefaults 如何使用
  • uniapp 中 web-view 向 App 传递消息
  • idea 修改背景图片教程
  • 24小时监控识别潜在的非安全生产隐患的明厨亮灶开源了。
  • 数据结构——二叉树
  • 【每日力扣中医养生】力扣2608. 图中的最短环
  • Pytorch常用训练套路框架(CPU)
  • 工厂模式与策略模式在Java中的应用案例分析
  • CSS的重绘和重排是什么?
  • golang嵌入式文件系统之 embed.FS
  • WebDeveloper:1靶机渗透测试
  • 【区块链+商贸零售】神椰——积分互通互兑平台 | FISCO BCOS应用案例