2012-02-17 125 views
17

的AutoMapper我試圖使用Automapper來映射到對象,問題是我試圖映射的對象之一在其所有屬性前有一個前綴'Cust_',而其中一個沒有。有沒有辦法做這個映射。帶有前綴

例如說我有

class A 
{ 
     String FirstName { get; set; } 
     String LastName { get; set; } 
} 

class B 
{ 
     String Cust_FirstName { get; set; } 
     String Cust_LastName { get; set; } 
} 

顯然,這種地圖將無法正常工作

AutoMapper.Mapper.CreateMap<A, B>(); 
b = AutoMapper.Mapper.Map<A, B>(a); 

回答

22
Mapper.Initialize(cfg => 
{ 
    cfg.RecognizeDestinationPrefixes("Cust_"); 
    cfg.CreateMap<A, B>(); 
}); 

A a = new A() {FirstName = "Cliff", LastName = "Mayson"}; 
B b = Mapper.Map<A, B>(a); 

//b.Cust_FirstName is "Cliff" 
//b.Cust_LastName is "Mayson" 

或者:

Mapper.Configuration.RecognizeDestinationPrefixes("Cust_"); 
Mapper.CreateMap<A, B>(); 
... 
B b = Mapper.Map<A, B>(a); 
... 
+2

乾杯這兩種方法很好地工作。雖然這兩種方法似乎都不是特定於實際的地圖A到B,但實際上會影響任何其他映射,比如說A到C – 2012-02-17 05:11:33

+0

@CliffMayson,但我不認爲這是有問題的,尤其是在您有多個遵循同一個約定的目標類。在確實需要單獨配置的情況下,例如,如果您需要使用不同邏輯來映射相同的兩個類,則始終可以使用它們自己的配置創建專用的MappingEngine。 HTH。 – 2012-02-18 04:23:53

0

文檔對Recognizing pre/postfixes文章

有時您的源/目標屬性將具有常見的前/後綴,導致您必須執行一堆自定義成員映射,因爲名稱不匹配。爲了解決這個問題,你可以識別前/後綴:

public class Source { 
    public int frmValue { get; set; } 
    public int frmValue2 { get; set; } 
} 
public class Dest { 
    public int Value { get; set; } 
    public int Value2 { get; set; } 
} 
Mapper.Initialize(cfg => { 
    cfg.RecognizePrefix("frm"); 
    cfg.CreateMap<Source, Dest>(); 
}); 

Mapper.AssertConfigurationIsValid(); 默認AutoMapper識別前綴「獲取」,如果你需要清除前綴:

Mapper.Initialize(cfg => { 
    cfg.ClearPrefixes(); 
    cfg.RecognizePrefixes("tmp"); 
});