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