Дополнительные итерации в foreach на карте AutoMapper - PullRequest
8 голосов
/ 24 июня 2011

По какой-то причине цикл, который я использую в определении карты AutoMapper, повторяется больше, чем должен.

Определение карты:

    Mapper.CreateMap<AdminGameEditModel, Game>()
        .BeforeMap((s, d) =>
        {
            foreach (var platId in s.PlatformIDs)
            {
                Platform newPlat = _gameRepository.GetPlatform(platId);

                d.Platforms.Add(newPlat);
            }
        })
        .ForMember(dest => dest.BoxArtPath, opt => opt.Ignore())
        .ForMember(dest => dest.IndexImagePath, opt => opt.Ignore())
        .ForMember(dest => dest.Cons, opt => opt.MapFrom(src => String.Join("|", src.Cons)))
        .ForMember(dest => dest.Pros, opt => opt.MapFrom(src => String.Join("|", src.Pros)))
        .ForMember(dest => dest.LastModified, opt => opt.UseValue(DateTime.Now))
        .ForMember(dest => dest.Platforms, opt => opt.Ignore());

foreach в BeforeMap по какой-то причине будет повторяться в массиве s.PlatformIDs несколько раз. Так, например, если он содержит два значения, я получу шесть или более итераций, с повторением двух ожидаемых значений. Идентификаторы платформы не определены как двумерный массив, и отладчик подтверждает, что массив содержит только те значения, которые он должен, без повторяющихся наборов.

Я озадачен тем, что может быть причиной.


РЕДАКТИРОВАТЬ: С циклом у меня есть следующие точки останова -

.BeforeMap((s, d) =>
{
    foreach (var platId in s.PlatformIDs) // breakpoint 1
    {
        Platform newPlat = _gameRepository.GetPlatform(platId); // breakpoint 2

        d.Platforms.Add(newPlat);
    } // breakpoint 3
})

Первый проход нормальный - точка останова 1 -> точка останова 2 -> точка останова 3. Затем он вернется к 2, а затем к 3, что ожидается. Странно то, что он затем вернется к точке останова 1 и начнет процесс заново.

Я не уверен, что есть шаблон. Два значения массива дают шесть проходов. Одно значение массива приводит к четырем проходам.


РЕДАКТИРОВАТЬ 2: Моя догадка была права - BeforeMap стреляет несколько раз.


РЕДАКТИРОВАТЬ 3: Проблема сохраняется и в AfterMap. Метод выполняется более одного раза для каждого отображения.

1 Ответ

4 голосов
/ 25 июня 2011

Кажется, что это настоящая ошибка, судя по чему-то похожему: http://automapper.codeplex.com/workitem/6604. Я написал ее как проблему на GitHub AutoMapper, и связал эту проблему с этим вопросом, чтобы разработчики могли видеть, кем я былпытаясь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...