Отображение перечисления в класс со свойством того же типа перечисления - PullRequest
0 голосов
/ 17 августа 2011

Скажем, у меня есть класс со следующим определением:

public class DestinationOuter
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<DestinationInner> Siblings { get; set; }
}

public class DestinationInner
{
    public string Name { get; set; }
    public RelationEnum Relation { get; set; }
}

И, скажем, у меня есть тип источника:

public class SourceSiblings
{
    public string Name { get; set; }
    public RelationEnum Relation { get; set; }
}

С AutoMapper я могу легко создать конфигурацию, которая сопоставляется сSourceSiblings до DestinationInner, что позволяет мне сделать сопоставление следующим образом:

SourceSiblings[] brothers = { ... };
DestinationOuter dest = new DestinationOuter();

Mapper.Map(brothers, dest.Siblings);

Но то, что я хотел бы сделать, это сопоставить непосредственно с SourceSiblings на DestinationOuter.В этом случае свойства Name и Age в DestinationOuter будут игнорироваться в отображении, но идея заключается в том, что SourceSiblings будет отображаться в DestinationOuter.Siblings.Используя описанные выше объявления объектов, я бы хотел иметь возможность:

Mapper.Map(brothers, dest);

Я не уверен, как заставить это работать.Я могу настроить конфигурацию так:

CreateMap<IEnumerable<SourceSiblings>, DestinationOuter>();

Но это ничего не делает.Похоже, мне нужно иметь возможность сказать что-то вроде:

CreateMap<IEnumerable<SourceSiblings>, DestinationOuter>()
       .ForMember(dest => dest.Siblings,
                  opt => opt.MapFrom(src => src));

И хотя вышеизложенное компилируется, Mapper.Map на самом деле не отображает значения.

1 Ответ

1 голос
/ 17 августа 2011

Этот код, кажется, работает для меня, но в значительной степени то, что вы сказали, ничего не делает.

internal class Program
{
    private static void Main(string[] args)
    {
        SourceSiblings[] brothers = {
                                        new SourceSiblings {Name = "A", Relation = 1},
                                        new SourceSiblings {Name = "B", Relation = 2}
                                    };
        var dest = new DestinationOuter();

        Mapper.CreateMap<SourceSiblings, DestinationInner>();

        Mapper.CreateMap<IEnumerable<SourceSiblings>, DestinationOuter>()
            .ForMember(d => d.Name, opt => opt.Ignore())
            .ForMember(d => d.Age, opt => opt.Ignore())
            .ForMember(d => d.Siblings, opt => opt.MapFrom(s => s));

        Mapper.Map(brothers, dest);
        Console.Write(dest.Siblings.Count);
        Console.ReadLine();
    }
}

public class DestinationOuter
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<DestinationInner> Siblings { get; set; }
}

public class DestinationInner
{
    public string Name { get; set; }
    public int Relation { get; set; }
}

public class SourceSiblings
{
    public string Name { get; set; }
    public int Relation { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...