2016-01-26 43 views
1

例如,假設我有以下...當一個匹配源時,AutoMapper能映射到不同的目標屬性嗎?

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.WrittenDateTheDestination.WrittenDate代替我在.ForMember中指定的TheDestination.CreateDate

- 我問這是因爲我從上面的CreateMap行得到一個AutoMapper DateTime異常。

回答

2

Automapper是否嘗試將TheSource.WrittenDate映射到TheDestination.WrittenDate而不是TheDestination.CreateDate,如在.ForMember中指定的那樣?

不是TheDestination.CreateDate

  • 自動映射器將映射src.WrittenDatedest.CreateDate,因爲您明確指定。

  • 它會將src.WrittenDate映射到dest.WrittenDate,因爲按照慣例,如果您沒有另外指定,則在創建映射時,具有相同名稱的屬性將相互映射。

要覆蓋此行爲,你可以explcitly告訴Automapper忽略dest.WrittenDate這樣的:

Mapper.CreateMap<TheSource, TheDestination>() 
    .ForMember(dest => dest.CreateDate, opt => opt.MapFrom(src => src.WrittenDate)) 
    .ForMember(dest => dest.WrittenDate, opt => opt.Ignore()); 
+0

這完美。謝謝。我現在知道了。雖然我指定src.WrittenDate轉到dest.CreateDate,但AutoMapper也想將src.WrittenDate映射到dest.WrittenDate。說得通。 – MaxAx

+0

不客氣 –

相關問題