ASP.NET8 中使用 AutoMapper 配置

ASP.NET8 中使用 AutoMapper 配置

菜鸟新人学习 .NET 记录,找到了个类似 Springboot 框架中的 Mapstruct 的工具,就是配置资料不是很多,踩了蛮多坑的。

假设现在有一个USER类,我想将它转换成USERVO把其中的 pwd 字段給隐藏掉,通过 AutoMapper 可以不用每个字段赋值创建对象这样子,直接上流程看看。

  1. 先创建对应类去继承 Profile,这里如果字段名称不同亦可以指定字段配置,有空再补上自定义的内容
/*
 * @Author: Jun
 * @Description:
 */

using AutoMapper;
using WebApplication1.Entity;
using WebApplication1.Vo;

namespace WebApplication1.Utils;

public class MappingProfile : Profile
{
    public MappingProfile()
    {	
        // 左边是资源,右边是目标,加上Reverse就是反过来也可以,省了一行代码
        // 如果想整个List<User> -> List<UserPageVo>也是样写,研究了半天
        CreateMap<User, UserPageVo>().ReverseMap();
    }
}
  1. Program 中注入 AutoMapper
builder.Services.AddAutoMapper(typeof(MappingProfile));
  1. 在逻辑层就可以编写代码了,ok大功告成
public async Task<ActionResult<PaginatedResponse<UserPageVo>>> QueryUserPage(QueryUserPage query)
    {
        var totalCount = await _info.User.CountAsync();
        var page = new PageParam(query.PageNo.Value, query.PageSize.Value, totalCount);
        var wrapper = _info.User.AsQueryable();
        if (!string.IsNullOrEmpty(query.Username))
        {
            wrapper.Where(e => e.Username.Contains(query.Username));
        }
        if (query.State != null)
        {
            wrapper.Where(e => e.State == query.State);
        }
        
        if (query.Permission !=null)
        {
            wrapper.Where(e => e.Permission == query.State);
        }

        List<User> listAsync = await wrapper.Skip((page.PageNo.Value - 1) * page.PageSize.Value).Take(page.PageSize.Value).OrderBy(e => e.CreateTime).ToListAsync();
        List<UserPageVo> result = _mapper.Map<List<UserPageVo>>(listAsync);
        return new PaginatedResponse<UserPageVo>(result, page);
    }
posted @   颜骏  阅读(180)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示