我的模型类似于以下内容:

public class Source
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

public class SourceContainer
{
    public Source Source { get; set; }
    public string ExtraData { get; set; }
}

public class SourceViewModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string ExtraData { get; set; }
}

Mapper.CreateMap<Source, SourceViewModel>();


当我想从Source映射到SourceViewModel时,一切都很好,而我只是没有填充ExtraData。但我也想从SourceContainer映射到SourceViewModel,最好不要为每个属性指定映射。

进行映射时,是否可以告诉AutoMapper从子属性Source导入属性?就像是:

Mapper.CreateMap<SourceContainer, SourceViewModel>()
    .UseMappingForProperty(x => x.Source);


否则,我可以分别向AutoMapper告知SourceViewModel上的每个属性,并从子Source中获取它,但是我想知道是否有更优雅的方法。

最佳答案

我将使用.ConstructUsing初始化内部SourceViewModel属性的映射结果来生成结果Source

Mapper.CreateMap<SourceContainer, SourceViewModel>()
    .ConstructUsing(container => Mapper.Map<SourceViewModel>(container.Source));


在构造ExtraData之后,将方便地映射SourceViewModel

09-25 20:14