2013-11-01 50 views
2

我想在工作中學習c#,並且我不太確定如何在同一時間使用Automapper。有這種擴展方法正在使用該網站的其他區域。我試圖在另一個C#類中使用它。瞭解Automapper

public static TResult MapTo<TResult>(this object self) 
    { 
     if (self == null) 
      throw new ArgumentNullException(); 

     return (TResult)Mapper.Map(self, self.GetType(), typeof(TResult)); 
    } 

我得到的異常「類型‘AutoMapper.AutoMapperMappingException’的異常出現在AutoMapper.dll但在用戶代碼中沒有處理。」然後,當我看到內部異常時,它說:「試圖將BlahEntity映射到BlahResponse。」我不太清楚如何去調試這個。有什麼想法嗎?提前致謝。

+0

您是否爲對象創建了映射?如果你剛開始使用Automapper,你可以閱讀:https://automapper.codeplex.com/wikipage?title=Getting%20Started – squillman

+0

@squillman不,我還沒有創建地圖。我不知道我需要。將看看維基。 – Crystal

回答

3

您將首先需要「創建」對象之間的映射,即使映射沒有進行自定義。例如:

Mapper.CreateMap<DomainObject, DTOObject>(); 

注意,這是一個單向的地圖,回去你需要它在另一個方向映射的其他方式。請注意,有很多博客/帖子/答案,爲什麼你應該只從Domain-> DTO而不是其他方式,但對於其他類型的應用程序中的對象應該沒問題。所以:

Mapper.CreateMap<DTOObject,DomainObject>(); 

使用沒有自定義,Automapper使用約定來決定這些對象如何相互關聯。例如,如果兩個對象都有一個名爲「CustomerName」的字段,那麼顯然它們應該被自動映射。

還有其他選項可用於創建對象可以相互關聯的自定義方式。例如,在我們的DTO中,我們可能只想要「CustomerName」,但在我們的Domain模型中,我們有「FirstName」和「LastName」。我們可以創建一個特殊的映射配置,以在映射對象時自動連接這兩個映射配置。

查看此處的Automapper文檔:https://github.com/AutoMapper/AutoMapper/wiki