目前我無法控制要映射到或來自哪個對象,因此更改它們目前不是選項。我正在嘗試設置一個映射,其中需要計算數組中的單個對象的大約十幾個屬性。我的映射看起來類似於現在這個權利:可以將AutoMapper配置爲重用計算的參考屬性嗎?
.ForMember(d => d.CountyName, o => o.MapFrom(x => x.TerritoryAndCounty.Options.OrderByDescending(y => y.Selected).FirstOrDefault()?.CountyName)))
.ForMember(d => d.County, o => o.MapFrom(x => x.TerritoryAndCounty.Options.OrderByDescending(y => y.Selected).FirstOrDefault()?.County)))
.ForMember(d => d.TerritoryCode, o => o.MapFrom(x => x.TerritoryAndCounty.Options.OrderByDescending(y => y.Selected).FirstOrDefault()?.TerritoryCode)))
.ForMember(d => d.Address, o => o.MapFrom(x => x.Location.Address))...
正如你所看到的,映射將不得不一遍又一遍的計算相同的代碼爲每個屬性,每次服用不同的最終性能。鑑於有數百個屬性(我知道,yuck),我想避免在一個大的ConstructUsing()語句中執行它。性能也是一個問題,所以我想只能確定一次正確的territoryAndCountyOption。
當您開始映射時可以在映射期間創建變量嗎?我不知道預測是否對這裏有幫助,但這不是連接到數據庫,我想在映射中指定正確的區域,而不是在每個Mapper.Map調用中。我在想這個錯誤的方式嗎?有更好的解決方案嗎?
嗯,如果我明白你在說什麼,這將涉及改變我的目標對象,對吧?我目前的方向是我不會更改源或目標對象。也許我可以用這種方法與中介對象? –
我的解決方案不會更改目標對象的公共表面,但它需要一些東西。我不會使用中間對象,因爲您需要明確映射兩次,從而失去了爲您完成映射的大部分優勢。 – Richard
嗯,不是公共場所,但我仍然需要自己改變課程......我*可能*能夠擺動。現在我實現了一組私有類,從服務創建映射到這些映射,然後從私有類映射到結果對象,然後我使用從服務映射到結果的構造,返回雙映射器。地圖來完成這一切,同時仍然是消費類使用時的單個Mapper.Map調用。謝謝你的幫助! –