Сложные коллекции с Automapper - PullRequest
       3

Сложные коллекции с Automapper

0 голосов
/ 03 сентября 2010

Вот что у меня есть, и я надеюсь, что кто-то может нам помочь:

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 <<code>Source, Dest> (src);

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

1 Ответ

0 голосов
/ 24 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...