ASP.NET Core中对象映射的AutoMapper如何为?
摘要:[TOC] AutoMapper 简介 AutoMapper是一个对象映射器,它可以将一种类型的对象转换为另一种类型的对象。 它提供了映射规则及操作方法,使我们不用过多配置就可以映射两个类, 可以帮我们免于编写无聊的映射代码. 在代码层与层
目录AutoMapper 简介AutoMapper 使用初始化Profile设置扁平化映射集合映射投影条件映射值转换设置转换前后行为配置验证及设置反向映射自定义转换器自定义解析器参考
AutoMapper 简介
AutoMapper是一个对象映射器,它可以将一种类型的对象转换为另一种类型的对象。
它提供了映射规则及操作方法,使我们不用过多配置就可以映射两个类, 可以帮我们免于编写无聊的映射代码. 在代码层与层之间隔离模型model上非常有用.
AutoMapper 使用
初始化
创建两个简单的类用于测试:
public class UserEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class UserDTO
{
public int Id { get; set; }
public string Name { get; set; }
}
AutoMapper可以使用静态类和实例方法来创建映射.
静态类方式
Mapper.Initialize(cfg => cfg.CreateMap<UserEntity, UserDTO>());
var userDTO = Mapper.Map<UserDTO>(user);
实例方式
var config = new MapperConfiguration(cfg => cfg.CreateMap<UserEntity, UserDTO>());
var mapper = config.CreateMapper();
var userDTO = mapper.Map<UserDTO>(user);
依赖注入
使用扩展 AutoMapper.Extensions.Microsoft.DependencyInjection 来实现AutoMapper的依赖注入. 本质是注册一个MapperConfiguration的单例和IMapper的scope实例, 通过程序集扫描添加AutoMapper的相关配置和映射.
IServiceCollection services = new ServiceCollection();
services.AddAutoMapper();
var provider = services.BuildServiceProvider();
using (var scope = provider.CreateScope())
{
var mapper = scope.ServiceProvider.GetService<IMapper>();
var userDTO = mapper.Map<UserDTO>(user);
}
Profile设置
可以使用Profie配置来实现映射关系, 然后通过AddProfile添加.
public class UserProfile : Profile
{
public UserProfile()
{
CreateMap<UserEntity, UserDTO>();
}
}
var config = new MapperConfiguration(cfg => cfg.AddProfile<UserProfile>());
扁平化映射
AutoMapper支持扁平化映射, 它会根据Pascal命名方式分割目标字段为单个单词, 可自动映射属性名+内嵌属性名. 如下例AutoMapper自动映射UserEntity.Address.City -> UserDTO.AddressCity。
