ASP.NET8 中使用 AutoMapper 配置
菜鸟新人学习 .NET 记录,找到了个类似 Springboot 框架中的 Mapstruct 的工具,就是配置资料不是很多,踩了蛮多坑的。
假设现在有一个USER
类,我想将它转换成USERVO
把其中的 pwd 字段給隐藏掉,通过 AutoMapper 可以不用每个字段赋值创建对象这样子,直接上流程看看。
- 先创建对应类去继承 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();
}
}
- Program 中注入 AutoMapper
builder.Services.AddAutoMapper(typeof(MappingProfile));
- 在逻辑层就可以编写代码了,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);
}
标签:ASP,wrapper,State,Value,NET8,AutoMapper,query,page
From: https://www.cnblogs.com/junun/p/18383319