2011-06-23 10 views
8

Herhangi bir nedenle, AutoMapper harita tanımında kullandığım bir döngü, olması gerekenden daha fazla yineleniyor.Bir AutoMapper haritasında bir foreach içinde ekstra iterasyonlar

haritası tanımı: BeforeMap yılında

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()); 

foreach, bazı nedenlerden dolayı, s.PlatformIDs dizisi birden fazla kez yineleme olacak. Yani, örneğin, iki değer içeriyorsa, iki beklenen değer tekrarlanarak altı veya daha fazla yineleme alacağım. PlatformID'ler, iki boyutlu bir dizi olarak tanımlanmış değil değil ve hata ayıklayıcı, dizinin yalnızca yinelenen kümeler olmadan, olması gereken değerleri içerdiğini doğrular.

Neye neden olabileceğine dair şaşkınım.


DÜZENLEME: döngü ile, ben şu kesme noktaları var -

.BeforeMap((s, d) => 
{ 
    foreach (var platId in s.PlatformIDs) // breakpoint 1 
    { 
     Platform newPlat = _gameRepository.GetPlatform(platId); // breakpoint 2 

     d.Platforms.Add(newPlat); 
    } // breakpoint 3 
}) 

ilk geçiş normaldir -> 2 çalışma noktasının - - 1 çalışma noktasının> Daha sonra 2'ye geri döner 3. çalışma noktasının , sonra beklenen 3'e. Garip olan şey, daha sonra 1 kırılma noktasına geri sıçraması ve işlemi tekrar başlatmasıdır.

Bir desen olup olmadığından emin değilim. İki dizi değeri altı geçişle sonuçlanır. Bir dizi değeri dört geçişle sonuçlanır.


DÜZENLEME 2: My önsezi haklıydı - BeforeMap kereden fazla ateş ediyor.


DÜZENLEME 3: problemi de AfterMap devam etmektedir. Yöntem, eşleme başına birden çok kez yürütülür.

+0

Döngüyü aştınız mı? – boca

+0

Evet ve olması gerekenden daha çok yineleniyor. Daha fazla ayrıntı için benim düzenime bakın –

+0

Acaba Acaba TimeMap aslında birden çok kez ateş ediyor mu? –

cevap

4

Benzer bir şeyle değerlendirerek okunaklı bir hata olduğu anlaşılıyor: http://automapper.codeplex.com/workitem/6604. AutoMapper'ın GitHub'ında bir sorun olarak yazdım ve bu soruyu bu soruna bağladım, böylece dev'ler ne yapmaya çalıştığımı görebiliyorlar.