【问题标题】:Extra iterations in a foreach in an AutoMapper mapAutoMapper 映射中的 foreach 中的额外迭代
【发布时间】:2011-09-21 13:21:51
【问题描述】:

由于某种原因,我在 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 数组。因此,例如,如果它包含两个值,我将获得六次或更多次迭代,两个预期值重复。 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 也存在问题。该方法在每个映射中执行多次。

【问题讨论】:

  • 你有没有越过循环?
  • 是的,它的迭代次数超出了预期。查看我的编辑了解更多详情
  • 我想知道 BeforeMap 是否实际上触发了多次,可能每个 ForMember 一次或其他什么。
  • 为什么不把beforeMap代码移到dest.Platforms的实际映射中呢?您也可以将其移至 AfterMap
  • 两个都试一下。现在做不到 - 远离开发机器。

标签: c# loops foreach automapper


【解决方案1】:

似乎是一个合法的错误,由类似的东西判断:http://automapper.codeplex.com/workitem/6604。我已将其作为问题写在 AutoMapper 的 GitHub 上,并将该问题与此问题相关联,以便开发人员可以看到我正在尝试做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2010-11-29
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多