通过 AutoMapper 促进对象映射。本案基本实施流程”
有一个应用程序使用 ASP.NET Core 8 Web API 开发。各层之间的数据操作和模型传输是多余的。我想创建映射规则以使这些过程更有效率。
AutoMapper 是一个专为基于规范和规则的对象到对象映射而设计的库。例如,使用 AutoMapper 对代码进行缩减和标准化,例如持久化数据库数据并通过业务逻辑将其转换为 API 模型,或者在 MVC 中将其重复输入到 ViewModel 中。
在项目中安装 NuGet 包。
・自动映射器・自动映射器
.扩展.Microsoft.依赖注入
将从数据库获取的信息转换为适合应用程序的模型格式。
基础结构层
// 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; }
}
为 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())
}
}
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();
使用 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;
}
}
AutoMapper 的使用简化并阐明了对象互转换的规则。在频繁编码自定义转换器代码时,利用 AutoMapper 在代码维护方面具有优势。