前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【BlogBook书】7、AutoMapper:对象映射

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

作者头像
老张的哲学
发布2024-02-22 15:49:00
750
发布2024-02-22 15:49:00
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始

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

一、相关的依赖注入配置

代码语言:javascript
复制
builder.Services.AddAutoMapperSetup();

相关参数设置

代码语言:javascript
复制
// 不需要配置

二、使用方式

1、定义数据库实体模型

代码语言:javascript
复制
/// <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、定义要转换的视图模型

代码语言:javascript
复制
public class SysUserInfoDto : SysUserInfoDtoRoot<long>
 {
     public string uLoginName { get; set; }
     public string uLoginPWD { get; set; }
     // 更多字段...
 }

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

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

代码语言:javascript
复制
/// <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<>来使用

代码语言:javascript
复制
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)
    };
}
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-06,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com