AutoMapper地图中foreach中的额外迭代

出于某种原因,我在AutoMapper地图定义中使用的循环迭代次数超过应有的范围。

地图定义:

Mapper.CreateMap() .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数组。 因此,例如,如果它包含两个值,我将获得六次或更多次迭代,其中两个期望值重复。 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中也存在。 该方法每次映射执行多次。

似乎是一个合法的错误,从类似的东西判断: http : //automapper.codeplex.com/workitem/6604 。 我把它写成了AutoMapper的GitHub上的一个问题,并将这个问题与这个问题联系起来,以便开发者可以看到我试图做的事情。