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
中也存在此问题。该方法在每个映射中执行一次以上。
根据类似的判断,似乎是一个合法的错误:http://automapper.codeplex.com/workitem/6604.我在AutoMapper的GitHub上把它写成了一个问题,并把这个问题与这个问题联系起来,这样开发者就可以看到我试图做什么