Дополнительные итерации в foreach на карте AutoMapper

По какой-то причине цикл, который я использую в определении карты 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 несколько раз. Так, например, если он содержит два значения, я получу шесть или больше итераций с повторением двух ожидаемых значений. Идентификаторы платформы , а не определены как двумерный массив, и отладчик подтверждает, что массив содержит только те значения, которые он должен, без повторяющихся наборов.

I Я не понимаю, что может быть причиной этого.


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

.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 как хорошо. Метод выполняется более одного раза на отображение.

8
задан Major Productions 24 June 2011 в 19:21
поделиться