automapper 将具有通用列表的 class 映射到具有不同通用列表的相同 class

automapper map class with generic list to same class with a different generic

我有这个class:

public class PagedListResult<T>
{
    public int RecordCount {get; set;}
    public int PageNumber {get; set;}
    public int PageSize {get; set;}
    public IEnumerable<T> Records {get; set;}
}

现在基本上我希望能够创建将我的 EF 实体映射到我的 Dto 模型的映射器,示例:

public class UserEntity
{
    public int Id {get; set;}
    public string Name {get; set;}
}
public class UserDto
{
    public int Id {get; set;}
    public string Name {get; set;}
}

在我的 BLL class:

//other code
PagedListResult<UserEntity> result = _repo.GetUsers();
var pagedListOfDtos = Mapper.Map<PagedListResult<UserDto>>(result);
return pagedListOfDtos;
//other code

我已经在 UserEntityUserDto 之间创建了 Map 但显然我遗漏了什么?

您还需要创建 PagedListResult<UserEntity>PagedListResult<UserDto> 之间的映射,然后此测试通过:

[SetUp]
public void Setup()
{
    Mapper.CreateMap<UserEntity, UserDto>();
    Mapper.CreateMap<PagedListResult<UserEntity>, PagedListResult<UserDto>>();
}

[Test]
public void Q33128288()
{
    PagedListResult<UserEntity> result = new PagedListResult<UserEntity>
    {
        Records = new List<UserEntity> {new UserEntity {Id = 7}},
        RecordCount = 1
    };

    var pagedListOfDtos = Mapper.Map<PagedListResult<UserDto>>(result);

    Assert.AreEqual(1, pagedListOfDtos.RecordCount);
    Assert.AreEqual(1, pagedListOfDtos.Records.Count());
    Assert.IsInstanceOfType(typeof(UserDto), pagedListOfDtos.Records.Single());
    Assert.AreEqual(7, pagedListOfDtos.Records.Single().Id);
}