2012-02-17 22 views
17

私はAutomapperを使ってオブジェクトにマップしようとしています。マップしようとしているオブジェクトの1つに、そのプロパティの前に接頭辞「Cust_」があります。このマッピングを行う方法はありますか?ドキュメントはRecognizing pre/postfixesの記事を持っている接頭辞付きのAutoMapper

Mapper.Configuration.RecognizeDestinationPrefixes("Cust_"); 
Mapper.CreateMap<A, B>(); 
... 
B b = 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" 

または代わりに動作しません、私は明らかに

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

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

を持っていると言います

ソース/デスティネーションのプロパティには、名前が一致しないため、カスタムメンバーマッピングの束を行う必要があるため、前後の共通点があることがあります。これに対処するには、プレ/ポストフィックスを認識できます。

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();

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

乾杯方法の両方が完璧に動作:あなたは接頭辞をクリアする必要がある場合AutoMapperは接頭辞を認識し、デフォルトで は、「ゲット」。どちらの方法も実際の地図AからBに特有のようではありませんが、他のマッピングにはAからCのようになります。 –

+0

@CliffMaysonしかし、これは問題ではないと思います。特に複数の同じ慣習に従ったターゲットクラス。本当に別々の設定を必要とする場合、たとえば、同じ2つのクラスをマッピングするためのロジックが異なる必要がある場合は、独自の設定で専用のMappingEngineを作成できます。 HTH。 –

0

:たとえば

は、このマップが

AutoMapper.Mapper.CreateMap<A, B>(); 
b = AutoMapper.Mapper.Map<A, B>(a); 
関連する問題