2010-09-03 3 views
0

Вот что я имею, где я надеюсь, что кто-то может помочь нам:Комплексные коллекции с 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> 

Мне нужно сопоставить класс Source к типу назначения, который имеет:

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

Теперь, ClassX и класс ClassY имеют следующие значения. ClassY класс имеет подмножество примитивных свойств ClassX с одинаковыми именами и типами.

Пробовал все виды сопоставлений. Просто ClassX на ClassY карте, с коллекциями, без и с любым отображением не получает никакого отображения находится между или отсутствуют конфигурация между Source и Dest

< AutoMapper.Mapper.Map Source, Dest> (ЦСИ);

Может ли кто-нибудь помочь мне с картографированием? Заранее спасибо.

+0

Чтобы уточнить: вы хотите, чтобы dest.name приходило из source.name и dest.A, чтобы исходить из source.Inner.A и dest.B, чтобы исходить из source.Inner.B? – PatrickSteele

+0

Патрик, да, это поведение, в котором я нуждаюсь. – gsogol

ответ

0

Этот вопрос несколько месяцев, но если вы все еще ищете ответ, это то, что я пытался что работало:

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

Я не пошел слишком углубленный с моим Утверждает , поэтому может быть что-то, что я пропустил, но они отображаются правильно.

Смежные вопросы