asp.net mvC语言 自动映射列表变为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. 所有属性都有相同的名称。

域。角色

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自动处理列表和数组

在我的例子中,我已经正确配置了(父)类型映射,但是我没有为子记录添加映射,所以对于这个:

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

我必须添加第二个映射:

cfg.CreateMap<FieldGroup, FieldGroupDTO>();
cfg.CreateMap<Field, FieldDTO>(); << was missing

避免在映射器配置中添加Collections。确保添加了所有类型(类)。当集合不在配置中时,我有错误,但那是因为没有包括所有类型。有点误导,但这就是问题所在。关键是,从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);

相关内容

  • 没有找到相关文章

最新更新