.NET CORE 中用AutoMapper将实体转Dto

在开发过程中,经常会碰到数据实体对象(Entity)和数据传输对象(Dto)的转换,手写代码太烦太LOW,可以用 AutoMapper 按规则自动转换。


1、安装两个依赖包,通过Nuget安装


AutoMapper 
AutoMapper.Extensions.Microsoft.DependencyInjection //startup 中 services.AddAutoMapper(); 需要依赖此包。



2、在Startup中添加AutoMapper


public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//添加对AutoMapper的支持,会查找所有程序集中继承了 Profile 的类
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

}




3、创建AutoMapper映射规则,继承 Profile


public class AutoMapperConfigs: Profile
{
    //添加你的实体映射关系.
    public AutoMapperConfigs()
    {
        //UserEntity转UserDto.
        CreateMap<UserEntity, UserDto>()
            //映射发生之前
            .BeforeMap((source,dto) => {
                //可以较为精确的控制输出数据格式
                dto.CreateTime = Convert.ToDateTime(source.CreateTime).ToString("yyyy-MM-dd");
            })
            //映射发生之后
            .AfterMap((source, dto) => {
                //code ...
            });

        //UserDto转UserEntity.
        CreateMap<UserDto, UserEntity>();
    }

}




4、在Controller构造函数中注入IMapper,然后在方法中使用


public class UserController : Controller
{
 private readonly IMapper _mapper;
 public UserController(IMapper mapper)
 {
     _mapper = mapper;
 }

 [HttpGet]
 public JsonResult Get(int id=1)
 {
     //模拟数据
     var user = new UserEntity() { Id = id, UserName = "UserA" };
     //实体对象转Dto对象
     var userDto = _mapper.Map<UserDto>(user);
     return new JsonResult(userDto);
 }

 [HttpGet]
 public JsonResult Get()
 {
     //模拟数据
     var users = new List<UserEntity>();
     for (int i=0;i<5;i++)
     {
         users.Add( new UserEntity() { Id = i, UserName = $"User{i}" });
     }
     
     //实体对象集合转Dto对象集合
     var userDtos = _mapper.Map<List<UserDto>>(usesr);
     return new JsonResult(userDtos);
 }
 

}



云服务器ECS地址:阿里云·云小站
上一篇:语义SLAM的数据关联和语义定位(三)


下一篇:什么是阿里云实例?什么是实例规格族?