用于 .NET 8 中对象映射的 AutoMapper

作者:微信公众号:【架构师老卢】
2-16 8:46
138

1. 本文的适用范围

通过 AutoMapper 促进对象映射。本案基本实施流程”

2. 背景

有一个应用程序使用 ASP.NET Core 8 Web API 开发。各层之间的数据操作和模型传输是多余的。我想创建映射规则以使这些过程更有效率。

3. 内容

3–1.自动映射器

AutoMapper 是一个专为基于规范和规则的对象到对象映射而设计的库。例如,使用 AutoMapper 对代码进行缩减和标准化,例如持久化数据库数据并通过业务逻辑将其转换为 API 模型,或者在 MVC 中将其重复输入到 ViewModel 中。

自动映射器

AutoMapper :基于约定的对象-对象映射器。100%有机和无麸质。消除了所有的大惊小怪......

automapper.org

3–2.设置

在项目中安装 NuGet 包。

・自动映射器・自动映射器
.扩展.Microsoft.依赖注入

3–3.实现

一个。实体

将从数据库获取的信息转换为适合应用程序的模型格式。

基础结构层

// Users.cs

public class Users:IDate  
{  
    public int UserId { get; set; }  
    public required string UserName { get; set; }  
    public required string FirstName { get; set; }  
    public required string LastName { get; set; }  
    public required string Email { get; set; }  
    public DateTime Birthday { get; set; }  
    public DateTimeOffset CreatedAt { get; set; }  
    public DateTimeOffset? UpdatedAt { get; set; }  
    public DateTimeOffset? DeletedAt { get; set; }  
}

业务层

// User.cs

public class User  
{  
    public int UserId { get; set; }  
    public required string FirstName { get; set; }  
    public required string LastName { get; set; }  
    public required string Email { get; set; }  
    public int BirthYear { get; set; }  
    public int BirthMonth { get; set; }  
    public int BirthDay { get; set; }  
    public string? OccupationName { get; set; }  
}

b. 创建 AutoMapper 配置文件

为 AutoMapper 设置映射配置以在两个模型之间映射。详细说明通过 AutoMapper 从一个模型传输到另一个模型的数据的过程。

・使用“CreateMap<Users, User>()”设置从用户到用户的映射。

・使用 ForMember 方法指定单个属性的映射或排除。

// AutoMapperProfile.cs

using AutoMapper;  
using System;  
​  
public class AutoMapperProfile : Profile  
{  
    public AutoMapperProfile()  
    {  
        CreateMap<Users, User>()  
            .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId))  
            .ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))  
            .ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))  
            .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.Email))  
            .ForMember(dest => dest.BirthYear, opt => opt.MapFrom(src => src.Birthday.Year))  
            .ForMember(dest => dest.BirthMonth, opt => opt.MapFrom(src => src.Birthday.Month))  
            .ForMember(dest => dest.BirthDay, opt => opt.MapFrom(src => src.Birthday.Day))  
            .ForMember(dest => dest.OccupationName, opt => opt.Ignore())  
    }  
}

c. 设置Program.cs

AutoMapper 在应用程序启动期间初始化,并配置为通过依赖关系注入在整个应用程序中可用。

・将 AutoMapper 添加到服务集合中。

// AutoMapperConfig.cs

using AutoMapper;  
using Microsoft.Extensions.DependencyInjection;  
  
var builder = WebApplication.CreateBuilder(args);  
  
builder.Services.AddAutoMapper(typeof(AutoMapperProfile));  
  
var app = builder.Build();  
  
app.Run();

d. 执行映射

使用 AutoMapper 实例 (IMapper) 执行从 Users 对象到 User 对象的映射。

// UserService.cs

using AutoMapper;  
  
public class YourService  
{  
    private readonly IMapper _mapper;  
  
    public YourService(IMapper mapper)  
    {  
        _mapper = mapper;  
    }  
  
    public User ConvertUsersToUser(Users users)  
    {  
        User user = _mapper.Map<User>(users);  
        return user;  
    }  
}

4. 说明

AutoMapper 的使用简化并阐明了对象互转换的规则。在频繁编码自定义转换器代码时,利用 AutoMapper 在代码维护方面具有优势。

相关留言评论
昵称:
邮箱:
阅读排行