学习AutoMapper(一):映射模型
前言
1、我使用的是 .net 7.0 WebAPI,以下代码是在Controllers里面实现。
2、图一是我数据库的数据,自己可创建Model模拟数据,图一role
必须要有name
,图二必须要有roleName
3、目的是为了做 model 模型的映射,图二不想要那么多模型,只想拿取图一role
里面的name
值,映射到图二roleName
一、安装包
此扩展用于ASP.NET Core程序
注:网上还有AutoMapper
包 ,但它用于非ASP.NET Core程序,下载下面的即可
AutoMapper.Extensions.Microsoft.Dependencylnjection
二、配置
1.创建文件 AutoMapperProfile
AutoMapperProfile.cs:
/// <summary>
/// 自动映射模型类
/// </summary>
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
//数据源,目标源.
CreateMap<User, UserDto>()
.ForMember(x=>x.RoleName, b => b.MapFrom(x=>x.Role.Name)) //定制规则:映射目标成员
.ReverseMap();//表示双向映射
}
}
2.注入服务
Program.cs:在builder.Services
那块写入就行,懂得都懂~
有两种写法,自己选一种即可
// 添加服务:
builder.Services.AddAutoMapper(typeof(AutoMapperProfile));//第一种:指定文件
//builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());//第二种:在当前作用域的所有程序集里面扫描AutoMapper的配置文件
3.实现
1、创建UserDto.cs
模型类
public class UserDto
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 角色(权限)名
/// </summary>
public string RoleName { get; set; }
}
2、控制器 HomeController 写入:
注
:ApiResponse
类是我封装外围的model数据,只要 Role.Name
的数据对应上 RoleName
就行了,可以看一下上面 AutoMapperProfile
文件
private readonly IMapper mapper;
public HomeController(IMapper mapper)
{
this.mapper = mapper;
}
[HttpGet]
public UserDto Index2()
{
#region 模拟数据
UserRole role = new UserRole();
role.Id = 1;
role.Name = "管理员";
User user = new User();
user.Account = "admin";
user.UserName = "老六的网管";
//user.RoleId = 1;(RoleId是我其他数据需要,这里可省略)
user.Role = role;
#endregion
UserDto model = mapper.Map<UserDto>(user);
return model;
//var resp = new ApiResponse(true, model);
//return resp;
}
三、效果图
总结
若有什么问题或不解,欢迎提出!
点点关注,让作者有更多的动力创作更多的文章~