我想将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
那么如何进行多对一映射呢?如果不是任何解决办法,那可能吗?
答案 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的回答)