我遇到了一种情况,我从API获取了一些有关旅行的数据.我正在使用AutoMapper将此"API模型"映射到EF Core实体,以存储在我的SQL服务器数据库中.
大多数映射都很简单,但我遇到了一种情况:TripModel
有一个名为ReasonForTravel
属性,它是一个int?
值-如果它有一个值,且该值是> 0
,那么我想使用自定义ValueConverter
将int
转换为我需要的字符串-但如果ReasonForTravel
根本没有值,或者它是<= 0
,那么我想从CustomTravelReason
到TripModel
上取值.
如何在AutoMapper CreateMap
中表达这一点,以便我可以一步映射我的TripModel
到Trip
实体?
这是我的代码-模型、实体和AutoMapper Profile
:
public class TripModel
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public int? ReasonForTravel { get; set; }
public string CustomTravelReason { get; set; }
// more stuff, but irrelevant here
}
public class Trip
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public string ReasonForTrip { get; set; }
}
public class TripProfile : Profile
{
public TripProfile()
{
CreateMap<TripModel, Trip>
// I know these two aren't strictly necessary - just for illustration of what I'm doing
.ForMember(dest => dest.Firstname, opt => opt.MapFrom(src => src.Firstname))
.ForMember(dest => dest.Lastname, opt => opt.MapFrom(src => src.Lastname))
// but how do I specify this now?? This is for the case of ReasonForTravel > 0
.ForMember(dest => dest.ReasonForTrip, opt => opt.ConvertUsing(new TravelReasonConverter(), src => src.Lastname))
// and this is for the case of ReasonForTravel <= 0 or ReasonForTravel = null
.ForMember(dest => dest.ReasonForTrip, opt => opt.MapFrom(src => src.CustomTravelReason));
}
}