2011-05-09 242 views
6

鑑於以下來源:Automapper和類層次結構

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

和目標:

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

而且這種映射:

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 

然而,這給出了一個映射錯誤說MyString的ISN沒有映射到DestDerived。是什麼賦予了?我是否真的需要在所有派生類型中重複基類屬性的映射(我在我的實際代碼中有多個子類)。

編輯:

確切的例外是上DestDerived以下1個性能無法映射:MyString中。添加自定義映射表達式,忽略或重命名DestDerived上的屬性。

+0

什麼是確切的錯誤? – 2011-05-09 20:46:19

回答

0

請查看這篇文章: http://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

它工作正常,如果您在下面的代碼(使用AutoMapper 1.1.0.188)宣佈它像。我不確定這是否能解決您的問題。

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

不,這不適合我們。它真的很奇怪,如果你調用Mapper.Map(source,typeof(SourceDerived),typeof(DestDerived)),那麼你的示例代碼將失敗。沒有例外,但也沒有進行映射。 – Andy 2011-05-10 12:58:03

+0

我們也調用Mapper.AssertConfigurationIsValid()。我想你會發現,如果你在設置映射後立即添加這個調用,你會在我的文章中提到異常。 – Andy 2011-05-10 13:22:24

+0

感謝您的意見。對不起,我無法幫助! – 2011-05-10 17:28:32