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