如何使用自动映射器将一个对象转换为另一个对象

how to convert one object into another using automapper

提问人:Ing. Jose Valera 提问时间:7/9/2023 最后编辑:Ing. Jose Valera 更新时间:7/10/2023 访问量:99

问:

我想使用自动映射器映射另一个对象,

这是我的响应类,其中有 country 对象,我想映射它,如下图所示,

public class AxisResponseDto
{
    #region Properties
    public int AxisId { get; set; }
    public string? AxisName { get; set; }
    public CountryResponseDto? Country { get; set; }

    #endregion
}

这是我对我的国家对象的回应,这也是我希望它成为的样子,

public class CountryResponseDto
{
    #region Properties
    public short CountryId { get; set; }
    public string? CountryName { get; set; }
    public string? AreaCode { get; set; }

    #endregion
}

这是我希望的答案

{
   axisId: 1,
   axisName: 'Santo Domingo',
   cuntry: {
    countryId: 1
    countryName: 'Republica Dominicana'
    countryId: '1'
    }
}

这是我获取轴对象的查询

    public async Task<BaseResponse<GetAxisByIdResponseDto>> Handle(GetAxisByIdQuery request, CancellationToken cancellationToken)
    {
        BaseResponse<GetAxisByIdResponseDto> response = new BaseResponse<GetAxisByIdResponseDto>();

        try
        {
            Axis axis = await _axisRepository.FindAxisId(request.AxisId);

            if (axis is null)
            {
                response.IsSuccess = false;
                response.Message = GlobalMessages.MESSAGE_QUERY_EMPTY;
                return response;
            }

            response.IsSuccess = true;
            response.Data = _mapper.Map<GetAxisByIdResponseDto>(axis);
            response.Message = GlobalMessages.MESSAGE_QUERY;

        }
        catch (SqlException ex)
        {
            response.IsSuccess = false;
            response.Message = ex.Message;
        }
        catch (Exception ex)
        {
            response.IsSuccess = false;
            response.Message = GlobalMessages.MESSAGE_EXCEPTION;
            WatchLogger.Log(ex.Message);
        }

        return response;
    }

这是我的轴类

public class Axis
{
    #region Properties
    public int AxisId { get; set; }
    public string? AxisName { get; set; }
    public short CountryId { get; set; }
    public int CompanyId { get; set; }

    #endregion
}

这是我的GetAxisByIdResponseDto类

public class GetAxisByIdResponseDto
{
    #region Properties
    public int AxisId { get; set; }
    public string? AxisName { get; set; }
    public CountryResponseDto? Country { get; set; }

    #endregion
}

我想要的是,当我按 id 查找轴对象时,将具有响应的国家/地区对象转换为我之前评论过的类,我不知道如何完成这部分,因为我是使用 # 映射器的新手,

我将不胜感激

请继续关注您的评论

映射 C#-10.0

评论

2赞 Vivek Nuna 7/9/2023
docs.automapper.org/en/stable/Getting-started.html 的良好起点
0赞 Ing. Jose Valera 7/9/2023
有了这些文档,我制作了简单的映射,但这些复杂的映射我无法做到,这就是为什么我看看你是否可以帮助我@VivekNuna
0赞 R44 7/9/2023
看起来您不需要映射任何东西。如果您已经找到了 Axis 对象,并且它里面有 Country 对象,您可以访问它或返回它,而无需进行任何映射
0赞 Ing. Jose Valera 7/9/2023
我明白,如果我需要进行映射,因为我需要 CountryId 和 CountryName 在具有轴对象的国家/地区对象中@R44
0赞 kosist 7/9/2023
它不是自动映射。您可以根据一个对象搜索另一个对象,然后填写其余的字段值。使用简单的老式方法实现它。

答:

0赞 Ajay Managaon 7/10/2023 #1

为此,您不需要任何自动映射。因为你已经包括 .AxisResponseDtoCountryResponseDto

如果要从数据库获取数据,则需要执行 Eager Loading with 关键字,以便它获取两个表数据。Include()

评论

0赞 Ing. Jose Valera 7/10/2023
我不能使用 include,因为我将 dapper 与存储过程一起使用,这就是为什么我想知道我如何在另一个对象中映射另一个对象,因为使用 axisId 内的 countryid,我必须执行搜索,对于您推荐的内容,它对我不起作用@Ajay
0赞 Ajay Managaon 7/10/2023
你用的是什么ORM?数据是否通过存储过程来自数据库?
0赞 Ing. Jose Valera 7/10/2023
确切地说,数据来自使用 dapper c# @Ajay Managaon 的数据库
0赞 Ajay Managaon 7/10/2023
你能分享 dapper 查询吗?
0赞 Ing. Jose Valera 7/10/2023
我刚刚分享了我如何获取轴对象的代码,我编辑了我的问题@Ajay