Automapper配置不能满足部分类的要求?

时间:2018-08-01 17:01:32

标签: c# automapper

我使用以下配置将以下AccountDetailRecord类映射到AccountDetailDto,但是以某种方式我在映射局部类时缺少了一些东西。

services
.AddSingleton(new MapperConfiguration(cfg =>
{
    cfg.CreateMap<AccountDetailRecord, AccountDetailDto>().ReverseMap();
    cfg.CreateMap<AddressRecord, AccountDetailDto.AddressDto>().ReverseMap();
}).CreateMapper())

来源

internal class AccountDetailRecord
{
    public Guid Id { get; set; }
    public string EstablishmentNumber { get; set; }
    public string Name { get; set; }
}
internal class AddressRecord
{
    public Guid Id { get; set; }
    public string City { get; set; }
    public string County { get; set; }
    public int AddressTypeId { get; set; }
    public string AddressTypeDescription { get; set; }
}

目的地:

public partial class AccountDetailDto
{
    public Guid Id { get; set; }
    public string EstablishmentNumber { get; set; }
    public string Name { get; set; }
    public List<AddressDto> Addresses { get; set; }
}

public partial class AccountDetailDto
{
    public class AddressDto
    {
        public Guid Id { get; set; }
        public string City { get; set; }
        public string County { get; set; }
        public AddressTypeDto AddressType { get; set; }
    }
}

public partial class AccountDetailDto
{
    public class AddressTypeDto
    {
        public int Id { get; set; }
        public string Description { get; set; }
    }
}

,但结果是AddressType的值。 我在配置中缺少什么?

1 个答案:

答案 0 :(得分:1)

根据类的属性,您需要反转映射,因此AutoMapper将能够将AddressTypeIdAddressTypeDescription的源属性展开为AddressTypeDto对象。

作为documentation states

  

仅为ReverseMap配置了展平。如果你想   展开时,必须配置Entity-> Dto,然后调用ReverseMap   从Dto-> Entity

创建一个非拼合类型映射配置

因此,您只需要将映射声明交换为:

cfg.CreateMap<AccountDetailDto.AddressDto, AddressRecord>().ReverseMap();