自动映射多对一地图配置

时间:2014-04-12 21:27:36

标签: c# mapping automapper automapper-3

我想将3个不同的类映射到单个DTO中,每个属性在源和目标上具有相同的名称,类如下:

  • 用户
  • 候选
  • 组合

这是DTO以及我想如何映射我的对象:

public class CandidateTextInfo
    {
        public string ProfilePicture { get; set; }   //-->User
        public ObjectId UserId { get; set; }         //-->User
        public string Name { get; set; }             //--> Candidate
        public string Headline { get; set; }         //--> Candidate
        public Gender Gender { get; set; }           //--> Candidate
        public byte Rating { get; set; }             //--> Candidate
        public bool IsCompany { get; set; }          //--> Candidate
        public string[] Tags { get; set; }           //--> Portafolio
        public string[] Categories { get; set; }     //--> Portafolio
        public string ExecutiveSummary { get; set; } //--> Portafolio
        public HourlyRate HourlyRate{ get; set; }    //--> Candidate
    }

我一直在寻找这样的解决方案,但我找不到方法ConstructUsing

那么如何进行多对一映射呢?如果不是任何解决办法,那可能吗?

1 个答案:

答案 0 :(得分:0)

Automapper的ConstructUsing对于从自定义代码构建一个属性很有用。在你的情况下,它没有必要。您只需要创建从对象到DTO的地图。然后将每个对象实例映射到同一个DTO实例。

但是,由于Automapper希望定义目标对象的每个属性以确保完全指定目标,因此您需要使用源对象中不存在的属性将每个映射配置为忽略

CreateMap<Candidate, CandidateTextInfo>()
.ForMember(x=> x.ProfilePicture, opt => opt.Ignore())
.ForMember(... 
// repeat for all destination properties not existing in source properties

如果这是太多的样板代码,那么很多解决方案都会在堆栈溢出上进行探索,其中一个看起来很有希望:AutoMapper: "Ignore the rest"?(看看Robert Schroeder的回答)