Как сопоставить модель представления с моделью иерархии с массивами с помощью AutoMapper? - PullRequest
2 голосов
/ 21 апреля 2011

Глубокая модель генерируется кодом с большим количеством массивов (например, код, созданный прокси-сервером WCF на основе wsdl), который должен быть заполнен уплощенной моделью представления.Между двумя моделями нет соглашений об именах.

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

public class ViewModel
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
}

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

public class DeepLevel0
{
    public DeepLevel1 Level1 { get; set; }
}

public class DeepLevel1
{
    public string Prop1;
    public DeepLevel2[] Level2 { get; set; }
}

public class DeepLevel2
{
    public string Prop2;
    public string Prop3;
}

Конечный результат должен быть следующим:

DeepLevel0.Level1.Prop1 = ViewModel.Item1
DeepLevel0.Level1.Level2[0].Prop2 = ViewModel.Item2
DeepLevel0.Level1.Level2[0].Prop2 = null;

Мне очень нравится система проверки в AutoMapper, зная, что вы взялись за все свойства.

Я получил следующую работу (но потерялпроверка):

  Mapper.CreateMap<ViewModel, DeepLevel0>()
      .ForMember(d => d.Level1, opt => opt.MapFrom(s => 
          new DeepLevel1 {
                            Prop1 = s.Item1,
                            Level2 = new[]
                                        {
                                            new DeepLevel2
                                                {
                                                    Prop2 = s.Item2,
                                                    Prop3 = null
                                                }
                                        }
                        }));
    }

Есть ли другой лучший способ?

1 Ответ

0 голосов
/ 09 августа 2011

Нет, я так не думаю.Вы всегда можете переключиться на использование конструктора для объектов DeepLevel, который может привести их в порядок.

...