菜雞抓蟲:AutoMapper 出現奇怪的型別對應錯誤嗎?貼心的慣例式映射可能正在造訪你家
部門朋朋前陣子忙著把一卡車陳年專案升級到 .Net 8,原本吃著火鍋唱著歌、升級升得好好的,眼看三下五除二就要升級完畢,但就在這一片祥和安寧之中,突然有個專案升級後 API 就原地死去,只留下 AutoMapper 的錯誤訊息,兇案調查也就此開始……
俗話說得好:不看錯誤訊息的偵探不是好偵探。
讓我們先看看以下片段(為保護當事欄位,已做混淆處理):
---> AutoMapper.AutoMapperMappingException: Error mapping types.
Mapping types:
BooDataModel -> BooDto
NiceProject.Repositories.DataModel.BooDataModel -> NiceProject.Services.Dto.BooDto
Type Map configuration:
BooDataModel -> BooDto
NiceProject.Repositories.DataModel.BooDataModel -> NiceProject.Services.Dto.BooDto
Destination Member:
ProductOrder
---> AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types:
OrderedEnumerable`1 -> Int32
System.Linq.OrderedEnumerable`1[[Product...]] -> System.Int32
對第一現場進行勘驗,發現幾個值得注意的點:
- 來源類別並沒有 ProductOrder 這個欄位,但目標類別有
- MapperConfiguration 並沒有明確要求 Ignore ProductOrder,但原本的版本運行得好好的,升級 .Net 後才出錯
現在我們已經收集了案發現場的線索,但我們還需要回答一個關鍵的問題:錯誤訊息中的 AutoMapper 在案發時究竟做了什麼?
……
