2016-12-05 119 views
1

我們正在設計一個實體定義可以改變的時間系統。我試圖設置Automapper,但無法弄清楚前綴應該如何工作。Automapper源前綴屬性

舉個例子,我想有以下實體:

public class ReferenceDataDefinition 
{ 
    public string Name { get; set; } 
} 

public class ReferenceData 
{ 
    public int Id { get; set; } 
    public ReferenceDataDefinition Current { get; set; } 
} 

具有以下DTO:

public class ReferenceDataDTO 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

我知道我可以使用

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Id, o => o.MapFrom(s => s.Id) 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

但我覺得有必須是我能做的更聰明的事情? 我試過添加RecognizePrefixes(「當前」),但沒有任何效果。

回答

1

我已經嘗試添加RecognizePrefixes( 「當前」)

這不是如何使用前綴。它們適用於您的屬性以前綴開頭的場景(通常是因爲數據庫命名模式)。

例如,如果你有以下類:

public class ReferenceData 
{ 
    public int Ref_Id { get; set; } 
    public string Ref_Name { get; set; } 
} 

public class ReferenceDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

您可以識別以下前綴:

cfg.RecognizePrefixes("Ref_"); 

然後AutoMapper將能夠這兩個對象,您無需定義地圖與.ForMember的具體映射。

關於你自己的地圖,因爲在ReferenceDataReferenceDataDTOId屬性具有相同的名稱,你應該能夠刪除ID件映射爲AutoMapper能夠自動推斷它:

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

這應該足夠了。

至於.Current使用Flattening如果您要更改DTO類以將其重命名爲CurrentName,則可以將其刪除。