.NET CORE 中用AutoMapper将实体转Dto-云惠网

avatar
avatar
云惠网小编
2077
文章
0
评论
2020年10月17日08:43:18 评论 17 次浏览 1520字阅读5分4秒

阿里云2000元通用代金券点击领取

在开发过程中,经常会碰到数据实体对象(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地址:阿里云·云小站

腾讯云618
avatar
腾讯云618
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: