Maj*_*ons 8 c# foreach loops 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());
由于BeforeMap某种原因,foreach 将在s.PlatformIDs数组中多次迭代.因此,例如,如果它包含两个值,我将获得六次或更多次迭代,其中两个期望值重复.该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.该方法每次映射执行多次.
从类似的东西来看,这似乎是一个合法的错误: http: //automapper.codeplex.com/workitem/6604。我已将其作为一个问题写在 AutoMapper 的 GitHub 上,并将该问题链接到这个问题,以便开发人员可以看到我正在尝试做什么。