例如,假设我有以下内容......
public class TheSource
{
public string WrittenDate { get; set; }
}
public class TheDestination
{
public string CreateDate { get; set; }
public DateTime WrittenDate { get; set;}
}
我有这样的映射...
Mapper.CreateMap<TheSource, TheDestination>()
.ForMember(dest => dest.CreateDate, opt => opt.MapFrom(src => src.WrittenDate));
问题:Automapper是否尝试将TheSource.WrittenDate
映射到TheDestination.WrittenDate
,而不是TheDestination.CreateDate
中我指定的.ForMember
?
- 我问这个是因为我从上面的CreateMap线获得了一个AutoMapper DateTime异常。
答案 0 :(得分:3)
Automapper是否尝试将TheSource.WrittenDate映射到TheDestination.WrittenDate而不是我在.ForMember中指定的TheDestination.CreateDate?
不是TheDestination.CreateDate
。
Automapper会将src.WrittenDate
映射到dest.CreateDate
,因为您已明确指定。
它会将src.WrittenDate
映射到dest.WrittenDate
,因为按照惯例,如果您没有另行指定,则在创建时,具有相同名称的属性将相互映射地图。
要覆盖此行为,您可以告知Automapper忽略dest.WrittenDate
,如下所示:
Mapper.CreateMap<TheSource, TheDestination>()
.ForMember(dest => dest.CreateDate, opt => opt.MapFrom(src => src.WrittenDate))
.ForMember(dest => dest.WrittenDate, opt => opt.Ignore());