1

我正在使用 automapper 5.2 从 Dto 映射到 Model 以及从 Model 到 Dto。但是我遇到的问题是,当我进行映射时有 0 个元素。这两个实体是相同的。

AutoMapperConfiguration.cs

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
        {
            x.CreateMap<PaisDto, Pais>().ReverseMap();
            x.CreateMap<List<PaisDto>, List<Pais>>().ReverseMap();
            x.CreateMap<Pais, PaisDto>().ReverseMap();
            x.CreateMap<List<Pais>, List<PaisDto>>().ReverseMap();
        });
    }
}

PaisService.cs

public IEnumerable<PaisDto> GetAll()
{
    AutoMapperConfiguration.Configure();
    List<PaisDto> dto = new List<PaisDto>();
    IEnumerable<Pais> paises = _paisRepository.GetPaisAll();
    dto = Mapper.Map<List<Pais>,List<PaisDto>>(paises.ToList());
    return dto.ToList();
}

会发生什么?

4

2 回答 2

1

不确定这是否是您要查找的内容,但您可以为单个 pais/paisDto 创建地图

当你想映射一个列表时,你可以使用 automapper 本身的 EF6 扩展

https://www.nuget.org/packages/AutoMapper.EF6/

那么你可以使用

.ProjectTo<TDestination>(mapperConfig) 

在需要映射的列表上

于 2017-03-01T15:47:46.067 回答
1

你不需要从一个列表映射到一个列表——Automapper 知道列表,你只需要告诉它各个项目:

Mapper.Initialize(x =>
{
    x.CreateMap<Pais, PaisDto>().ReverseMap();
});

然后它可以自己映射一个列表:

IEnumerable<Pais> paises = _paisRepository.GetPaisAll();
List<PaisDto> dto = Mapper.Map<List<PaisDto>>(paises);
return dto;

您也不需要在列表上调用 .ToList ,这只会制作另一个副本。

于 2017-03-01T21:42:56.433 回答