Я не уверен, что я уже думал об этом или нет, но я не могу этого вынести.Как я могу сопоставить дочерний объект с 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
, но в других случаях у меня есть дополнительные свойства. Если бы кто-то мог мне помочь, это было бы здорово.
Я бы не использовал AM для этого. Используйте его для простых, простых задач сопоставления. –