2016-01-15 30 views
1

剛剛開始使用AutoMapper,並希望弄清楚一些事情。Automapper - 在C#中創建地圖

假設我想在用戶和UserDto之間無縫地映射。

的例子似乎都表明,我要先去啓動區域(例如WebApiConfig.cs或startup.cs或global.axax等),做這樣的事情:

Mapper.CreateMap<User, UserDto>(); 

據推測,如果我有50或100個我想要映射的實體/ DTO,我需要從一個類到另一個類之間逐字添加50或100行代碼?當然有更聰明的方法,對吧?

如果我不需要做任何特定的映射/覆蓋,我是否真的需要這樣做?我一定誤解了框架的基本原理,因爲這對我來說似乎是錯誤的。

謝謝!

+0

「肯定有更聰明的方法,對嗎?」不是真的。除非你想通過反思去做。但是,如果將來*有問題,您需要特定的映射規則*。 – Rob

+0

謝謝。我覺得自己手動在我的控制器中寫出映射(當我想在兩件事之間進行映射時)足以讓映射器瞭解這兩種類型,但我猜不到。好的,謝謝 – NullHypothesis

+0

您是否理解(通過閱讀文檔)您可以在一個類中創建所需的所有映射讓我們假設EntityToViewModel並在global.asax中註冊該類?在控制器中創建它們將會產生一些重複的代碼,我想這就是你所關心的? – jpgrassi

回答

0

只要一切源和目標上的一致,你可以使用DynamicMap

var target = Mapper.DynamicMap<TSource, TTarget>(source); 

然而,由於需要它會更有效地創建一個映射:

if (Mapper.FindTypeMapFor<TSource, TTarget>() == null) 
{ 
    Mapper.CreateMap<TSource, TTarget>(); 
} 

var target = Mapper.Map<TSource, TTarget>(source);