【BlogBook书】7、AutoMapper:对象映射

科技   科技   2024-02-06 19:05   北京  

框架使用AutoMapper来处理对象与对象之间的转换,比较好的处理实体模型和视图模型之间的转换,在代码优化层面起到了很好的作用;


一、相关的依赖注入配置

builder.Services.AddAutoMapperSetup();

相关参数设置

// 不需要配置


二、使用方式

1、定义数据库实体模型

/// <summary>/// 用户信息表-实体模型/// </summary>[SugarTable("SysUserInfo", "用户表")] public class SysUserInfo : SysUserInfoRoot<long>{  public string LoginName { get; set; }
/// <summary> /// 登录密码 /// </summary> [SugarColumn(Length = 200, IsNullable = true)] public string LoginPWD { get; set; }
// 更多字段...}


2、定义要转换的视图模型

public class SysUserInfoDto : SysUserInfoDtoRoot<long> {     public string uLoginName { get; set; }     public string uLoginPWD { get; set; }     // 更多字段... }


3、配置两个类的字段映射关系,也可以做类型转换,比如字符串转时间类型等等

注意:为防止出现遗漏问题,两个方向都需要配置

/// <summary>/// 配置构造函数,用来创建关系映射/// </summary>public CustomProfile(){        // 实体模型向视图模型转换
CreateMap<SysUserInfo, SysUserInfoDto>() .ForMember(a => a.uLoginName, o => o.MapFrom(d => d.LoginName)) .ForMember(a => a.uLoginPWD, o => o.MapFrom(d => d.LoginPWD)); // 视图模型向实体模型转换 CreateMap<SysUserInfoDto, SysUserInfo>() .ForMember(a => a.LoginName, o => o.MapFrom(d => d.uLoginName)) .ForMember(a => a.LoginPWD, o => o.MapFrom(d => d.uLoginPWD));}


4、最后在需要用的地方直接依赖注入IMapper<>来使用

private readonly IMapper _mapper;
/// <summary> /// 构造函数 /// </summary> public UserRoleController(IMapper mapper) { _mapper = mapper; }

[HttpGet]public async Task<MessageModel<SysUserInfoDto>> AddUser(string loginName, string loginPwd){ var userInfo = await _sysUserInfoServices.SaveUserInfo(loginName, loginPwd); return new MessageModel<SysUserInfoDto>() { success = true, msg = "添加成功", response = _mapper.Map<SysUserInfoDto>(userInfo) };}


BCVP代码创新社
专注于 NetCore 相关技术栈的推广,致力于前后端之间的完全分离,从壹开始,让每一个程序员都能从这里学有所成。
 最新文章