2016-08-10 4 views
1

Я не уверен, что я уже думал об этом или нет, но я не могу этого вынести.Как я могу сопоставить дочерний объект с AutoMapper?

У меня есть родительский объект здесь называется Шаблон

public Template() 
{ 
    public long Id { get; set; } 
    public Scoring SubProperty { get; set; } 
} 

Вот мой объект Scoring, который является дочерним свойство Шаблон

public enum MyEnum : short 
{ 
    Basic = 0 
} 

public Scoring() 
{ 
    public MyEnum Type { get; set; } 
    public string Text { get; set; } 
} 

У меня есть TemplateModel определенный, как так, что я хочу для преобразования в

public TemplateModel() 
{ 
    public long Id { get; set; } 
    public string Type { get; set; } 
    public string Text { get; set; } 
} 

В моем профиле автомастера, я поставил это так, чтобы cov ert Шаблон для шаблонаModel.

public class TemplateProfile : Profile 
{ 
    protected override void Configure() 
    { 
     // converters 
     this.CreateMap<TemplateType, string>().ConvertUsing(new TemplateTypeConverter()); 

     // models 
     this.CreateMap<Template, TemplateModel>() 
      .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Scoring.Type)) 
      .ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Scoring.Text)); 

    } 

    /// <summary> 
    /// Convert TemplateType to string 
    /// </summary> 
    private class TemplateTypeConverter : ITypeConverter<TemplateType, string> 
    { 
     public string Convert(ResolutionContext context) 
     { 
      return context.SourceValue.ToString().ToLower(); 
     } 
    } 
} 

Как я могу преобразовать TemplateModel обратно в шаблон?

Если я добавлю следующее, я получаю исключение, потому что dest.Scoring.Type не является свойством root.

this.CreateMap<TemplateModel, Template>() 
    .ForMember(dest => dest.Scoring.Type, opt => opt.MapFrom(src => src.Type)) 
    .ForMember(dest => dest.Scoring.Text, opt => opt.MapFrom(src => src.Text)); 

Любая помощь очень ценится. В этом случае Template должен всегда иметь объект Scoring, но в других случаях у меня есть дополнительные свойства. Если бы кто-то мог мне помочь, это было бы здорово.

+0

Я бы не использовал AM для этого. Используйте его для простых, простых задач сопоставления. –

ответ

5
this.CreateMap<TemplateModel, Template>() 
    .ForMember(dest => dest.SubProperty, opt => opt.MapFrom(src => src)); 

this.CreateMap<TemplateModel, Scoring>() 
    .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type)) 
    .ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Text)); 
+0

Спасибо, я, очевидно, пропустил часть 'src => src'. Прекрасно работает – Gillardo

+0

добро пожаловать @ user2736022 –

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