AutoMapper贴图中foreach中的额外迭代

本文关键字:迭代 foreach AutoMapper | 更新日期: 2023-09-27 18:00:19

由于某种原因,我在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.PlatformID数组。例如,如果它包含两个值,我将得到六次或更多的迭代,其中两个期望值重复。PlatformID是而不是定义为二维数组,调试器确认数组只包含它应该包含的值,没有重复集。

我不知道是什么原因造成的。


编辑:使用循环,我有以下断点-

.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中也存在此问题。该方法在每个映射中执行一次以上。

AutoMapper贴图中foreach中的额外迭代

根据类似的判断,似乎是一个合法的错误:http://automapper.codeplex.com/workitem/6604.我在AutoMapper的GitHub上把它写成了一个问题,并把这个问题与这个问题联系起来,这样开发者就可以看到我试图做什么