2012-08-01 153 views
1

也許這是一個愚蠢的問題,但它確實不是很明顯,我:(不需要是否可以自動創建自動映射器映射?

var address = new Address { Id = 1, Name = "John Doe" }; 

// Configure AutoMapper 
Mapper.CreateMap<Address, AddressViewModel>(); 

// Perform mapping 
var viewModel = Mapper.Map<Address, AddressViewModel>(address); 

恕我直言Mapper.CreateMap<Address, AddressViewModel>();,因爲AutoMapper其中執行映射事後得到這一信息。

那麼,爲什麼我寫這些配置?

回答

3

中快速browse through the source,看來,它存儲的映射發動機,使得遵循發動機負荷的映射數據的任何電話。

這可能是由於反射可能很昂貴,AutoMapper無法知道某人僅使用Mapper.Map的次數或次數。定義:緩存:)

+0

我想你會想在全球應用或app_start中定義你的地圖,不是嗎? – 2012-08-01 22:30:15

+1

哦,那也是。我只是假設OP的代碼是一個例子,而不是實際的代碼。 – 2012-08-01 22:31:13

1

如果沒有別的,Automapper不一定會在執行映射時獲取所有這些信息,因爲您可能已經在CreateMap表達式中指定了任意數量的.ForMember/.AfterMap(等)鏈接。您不希望在每次映射調用中重複所有這些操作。