2011-05-09 22 views
6

aşağıdaki kaynaklar:Automapper ve Verilen sınıf hiyerarşisi

public class SourceBase { public string TheString { get; set; } } 
public class SourceDerived : SourceBase { } 

ve varış noktaları:

public class DestBase { public string MyString { get; set; } } 
public class DestDerived : DestBase { } 

Ve bu haritalama: Ancak

CreateMap<SourceBase, DestBase>() 
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)) 
    .Include<SourceDerived, DestDerived>(); 

    CreateMap<SourceDerived, DestDerived>(); 
    Mapper.AssertConfigurationIsValid(); // Exception is thrown here 

, bu MyString bedeli vardır diyerek bir eşleme hata veriyor DestDerived üzerinde eşlenmiş. Ne verir? Gerçekten türetilmiş tüm türlerdeki temel sınıf özellikleri için eşlemeleri yinelemem gerekiyor mu (gerçek kodumda birden fazla alt sınıfım var).

DÜZENLEME:

tam istisna DestDerived aşağıdaki 1 özellikleri eşlenemediği geçerli: MyString. Özel bir eşleme ifadesi ekleyin, DestDerived'daki özelliği yoksayın veya yeniden adlandırın.

+0

Tam hata nedir? –

cevap

0

bu yazıyı kontrol edin: Düzgün çalışır http://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

sen (AutoMapper 1.1.0.188 kullanarak) aşağıdaki kodu gibi ilan eğer. Bu senin problemini çözüp çözmediğinden emin değilim.

var result = Mapper.CreateMap<SourceBase, DestBase>() 
       .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)); 
       //.Include<SourceDerived, DestDerived>(); 
      Mapper.CreateMap<SourceDerived, DestDerived>(); 
      var source = new SourceDerived(); 
      var destDerived = new DestDerived(); 
      source.TheString = "teststring"; 
      var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString; 
      Console.WriteLine(mapResult); 
+0

Hayır, bu bizim için işe yaramıyor. Mapper.Map (source, typeof (SourceDerived), typeof (DestDerived)) işlevini çağırırsanız, örnek kodunuz başarısız olur. İstisna yok, ancak haritalama da yapılmıyor. – Andy

+0

Ayrıca, Mapper.AssertConfigurationIsValid() 'diyoruz. Haritaları kurduktan hemen sonra bu aramayı eklerseniz, yazımda belirtilen istisnayı alacağınızı düşünürsünüz. – Andy

+0

Yorumlarınız için teşekkür ederiz. Üzgünüm, hiç yardım edemedim! –