Список отображения Automapper становится 0 - PullRequest
8 голосов
/ 08 апреля 2011

Я сопоставляю список с другим списком с помощью 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; }
}

Ответы [ 3 ]

33 голосов
/ 08 апреля 2011

Не создавать карты между списками и массивом, только между типами:

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

и затем:

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

AutoMapper обрабатывает списки и массивы автоматически.

0 голосов
/ 04 марта 2018

Избегайте добавления коллекций в конфигурацию вашего картографа. Убедитесь, что вы добавили все типы (классы). У меня были ошибки, когда коллекции не были в конфигурации, но это было потому, что не все типы были включены. Немного вводит в заблуждение, но вот в чем проблема. Суть в том, чтобы удалить все коллекции из конфигурации Mapper и добавить только все классы. Добавить коллекции при выполнении фактического преобразования, т.е. вызов к мапперу. Карта.

        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 голосов
/ 08 июля 2017

В моем случае отображение (родительского) типа было настроено правильно, но я не добавил сопоставления для дочерних записей, поэтому для этого:

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

Мне пришлось добавить второе отображение:

cfg.CreateMap<FieldGroup, FieldGroupDTO>();
cfg.CreateMap<Field, FieldDTO>(); << was missing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...