2012-02-17 25 views
17

Nesneleri eşleştirmek için Automapper'ı kullanmaya çalışıyorum, sorun haritaya çalıştığım nesnelerden biri, tüm özellikleri önünde bir 'Cust_' önekine sahip ve bir tanesi yok. Bu haritalamayı yapmanın bir yolu var mı? dokümantasyon Recognizing pre/postfixes ilgili bir makale varAutoMapper öneki

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

cevap

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" 

Veya alternatif çalışmaz ben Açıkçası

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

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

söylüyorlar

Bazen, kaynak/hedef özellikleriniz, adlar eşleşmediği için bir grup özel üye eşlemesi yapmanıza neden olan ortak ön/soneklere sahip olacaktır.) (

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;: Bu sorunu gidermek için, önceden/postfixes tanıyabilir

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

Şerefe yöntemleri hem mükemmel çalışır: Eğer önek temizlemek gerekiyorsa AutoMapper öneki tanır Varsayılan olarak , "al". Her iki yöntem de A'dan B'ye gerçek haritaya özgü görünmese de, diğer tüm eşlemelerin A'dan C'ye ( –

+0

@ CliffMayson) etkilenmesine rağmen, bunun çok sorunlu olduğunu düşünmüyorum. Aynı sözleşmeyi izleyen hedef sınıflar. Ayrı konfigürasyonlara sahip olmanız gereken durumlarda, örneğin, aynı iki sınıfı eşleştirmek için farklı mantığa sahip olmanız gereken durumlarda, her zaman kendine özgü 'MappingEngine'leri kendi konfigürasyonlarıyla yaratabilirsiniz. HTH. –

0

: Örneğin

bu haritanın

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