.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);
     }
     
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值