2010-09-03 5 views
0

Voici ce que j'ai où j'espère que quelqu'un peut nous aider:collections complexes avec Automapper

class Source 
{ 
    string name { get; set; } 
    Inner { get; set; } 
} 

class Inner 
{ 
    Col A { get; set; } 
    Col B { get; set; } 
} 


class Col : IList<ClassX>, IEnunmerable<ClassX> 

J'ai besoin de carte de classe Source à un type de destination qui a:

class Dest 
{ 
    string name { get; set; } 
    IList<ClassY> A { get; set;} 
    IList<ClassY> B { get; set;} 
} 

Maintenant, ClassX et la classe ClassY partagent les mêmes propriétés. ClassY classe a un sous-ensemble des propriétés primitives ClassX avec exactement les mêmes noms et types.

Essayé toutes sortes de cartographies. Juste le ClassX-ClassY carte, avec les collections, avec et sans aucune application ne se trouve entre la cartographie ou la configuration manquant entre Source et Dest

AutoMapper.Mapper.Map < Source, Dest> (src);

Quelqu'un peut-il m'aider avec la cartographie? Merci d'avance.

+0

Pour clarifier: vous voulez que dest.name provienne de source.name et dest.A provienne de source.Inner.A et de dest.B pour provenir de source.Inner.B? – PatrickSteele

+0

Patrick, oui c'est le comportement que je suis après. – gsogol

Répondre

0

Cette question est quelques mois, mais si vous cherchez toujours une réponse, ce que j'ai essayé travaillé:

class Source 
{ 
    public string Name { get; set; } 
    public Inner Inner { get; set; } 
} 
class Inner 
{ 
    public Col A { get; set; } 
    public Col B { get; set; } 
} 
class Col : List<ClassX> { } 
class ClassX 
{ 
    public int Index { get; set; } 
    public string Name { get; set; } 

    public ClassX() : this(0, "") { } 
    public ClassX(int index, string name) 
    { 
     this.Index = index; 
     this.Name = name; 
    } 
} 
class ClassY 
{ 
    public int Index { get; set; } 
    public string Name { get; set; } 

    public ClassY() : this(0, "") { } 
    public ClassY(int index, string name) 
    { 
     this.Index = index; 
     this.Name = name; 
    } 
} 
class Dest 
{ 
    public string Name { get; set; } 
    public List<ClassY> A { get; set; } 
    public List<ClassY> B { get; set; } 
} 

[TestMethod] 
public void ComplexTest() 
{ 
    Mapper.CreateMap<Source, Dest>() 
     .ForMember(dest => dest.A, config => config.MapFrom(src => src.Inner.A)) 
     .ForMember(dest => dest.B, config => config.MapFrom(src => src.Inner.B)); 
    Mapper.CreateMap<ClassX, ClassY>(); 

    Source source = new Source 
     { 
      Name = "Source", 
      Inner = new Inner 
       { 
        A = new Col 
         { 
          new ClassX(1, "First"), 
          new ClassX(2, "Second"), 
          new ClassX(3, "Third"), 
          new ClassX(4, "Fourth"), 
         }, 
        B = new Col 
         { 
          new ClassX(5, "Fifth"), 
          new ClassX(6, "Sixth"), 
          new ClassX(7, "Seventh"), 
          new ClassX(8, "Eighth"), 
         }, 
       } 
     }; 

    Dest destination = Mapper.Map<Source, Dest>(source); 

    Assert.AreEqual(source.Name, destination.Name); 
    Assert.AreEqual(source.Inner.A.Count, destination.A.Count); 
    Assert.AreEqual(source.Inner.B.Count, destination.B.Count); 
    Assert.AreEqual(source.Inner.A[0].Name, destination.A[0].Name); 
    Assert.AreEqual(source.Inner.B[0].Name, destination.B[0].Name); 
} 

Je ne suis pas trop en profondeur avec mon Affirme , donc il peut y avoir quelque chose qui me manque, mais ils semblent être correctement mappés.