나는이 생각을 끝내야할지 모르겠다. 그러나 나는 이것을 밖으로 나눌 수 없다.어떻게 AutoMapper를 사용하여 하위 개체를 매핑 할 수 있습니까?
나는 여기에 부모 개체가 서식 여기
public Template()
{
public long Id { get; set; }
public Scoring SubProperty { get; set; }
}
라는 가지고있다 템플릿의 자식 속성입니다 내 점수 개체
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 템플릿을 TemplateModel로 변환합니다.
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은 루트 속성이 아니기 때문에 다음을 추가하면 예외가 발생합니다.
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을 사용하지 않을 것이다. 간단하고 직관적 인 매핑 작업에 사용하십시오. –