自动映射列表变为0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动映射列表变为0相关的知识,希望对你有一定的参考价值。

我正在使用Automapper将列表映射到另一个列表,但似乎我的项目未被复制。

这是我的代码:

var roles = userRepo.GetRoles(null).ToList();
Mapper.CreateMap < List<Domain.Role>, List<Role>>();
var mappedRole = Mapper.Map<List<Domain.Role>, List<Role>>(roles); //the count is 0, list empty :(
Mapper.AssertConfigurationIsValid();
  1. 没有例外被抛出。
  2. 所有属性都具有相同的名称。

Domain.Role

public class Role
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public List<User> Users { get; set; }
}

角色

public class Role
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
}
答案

不要在列表和数组之间创建映射,只在类型之间创建:

Mapper.CreateMap<Domain.Role, Role>();

然后:

var mappedRole = Mapper.Map<List<Domain.Role>, List<Role>>(roles);

AutoMapper handles lists and arrays自动。

另一答案

在我的情况下,我正确配置了(父)类型映射,但我没有添加子记录的映射,所以为此:

class FieldGroup
{
    string GroupName { get; set; }
    ...
    List<Field> fields { get; set; }
}

我不得不添加第二个映射:

cfg.CreateMap<FieldGroup, FieldGroupDTO>();
cfg.CreateMap<Field, FieldDTO>(); << was missing
另一答案

避免在映射器配置中添加集合。确保添加所有类型(类)。当集合不在配置中时我遇到了错误,但那是因为没有包含所有类型。有点误导,但这就是问题所在。点是,从mapper配置中删除所有集合并仅添加所有类。在进行实际转换时添加集合即。调用mapper.Map。

        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Infrastructure.Entities.Pet, Domain.Model.Pet>();
            cfg.CreateMap<Infrastructure.Entities.Owner, Domain.Model.Owner>().ReverseMap();
        });

        var mapper = config.CreateMapper();
        var domainPetOwners = mapper.Map<List<Domain.Model.Owner>>(repoPetOwners);

以上是关于自动映射列表变为0的主要内容,如果未能解决你的问题,请参考以下文章

将值映射到色标

我正在片段中启动我的活动,但变量变为空?

如何修复在 OnCreateView() 中变为 null 的 List<>

POJ3691DNA repair(AC自动机,DP)

如何在屏幕方向更改时附加片段?

如何优化C ++代码的以下片段 - 卷中的零交叉