在每個專案內難免會碰到 Model 與資料表溝通的問題,或是接收到資料時轉換成我們自定義的 Model,在還不認識 AutoMapper 時不知道有沒有人跟我一樣,都是一行一行打的呢 (下方程式碼) 看起來略顯麻煩與耗費時間?如果資料表有 100 個欄位需要新增或更新時,是不是就要寫 100 行程式碼?這時候使用 AutoMapper 就派上用場了。

在介紹 AutoMapper 轉換前,請先在 NuGet 裡下載組件 AutoMapper 與 AutoMapper.Extensions.Microsoft.Dependencylnjection(圖一),並且建立一個 MappingProfile.cs 檔案,並且在Startup.cs 內的 ConfigureServices 中註冊 AutoMapper。

圖一 NuGet

這時候我們可以使用 AutoMapper,在 Controller 內注入 Mapper 後,建立一個函式試轉換一個 Model ( Model 內容參數名必須相同才得以轉換,後面會介紹到參數名不同時的轉換方式),並且在剛剛建立的 MappingProfile.cs 內寫入 Model 的轉換,左邊為轉入的 Model 格式,右邊則為我們想要轉出的 Model 格式。

啟用 Swagger後(圖二),運行函式就會發現 AutoMapper 把物自動轉換好,接下來我們來試一些進階的用法。

圖二 Swagger

如果我們要轉出的 Model 格式跟轉入的 Model 格式不太相同,或是參數名稱不太一樣時,還可以使用 AutoMapper 嗎?答案是可以的,但我們需要在轉換時做一些處理,首先準備兩個相差甚異的 Model ,如同上述所寫的方式在Controller 建立函式與 MappingProfile 建立 AutoMapper 轉換式,並且在轉換時針對不相同的參數做處理。

啟用 Swagger後(圖二),運行函式就會發現 AutoMapper 把物自動轉換好,並且剛剛新建立的CreateDateTime也一並回傳完成。

AutoMapper 在轉換 Model 時,並不是回傳舊有的 Model 而是返回一個全新的 Model,這會導致再更新 DB 時出錯(系統會判斷為不同物件,請參考下方文件1),這時我們可以改變 AutoMapper 的寫法來讓物件不會重新產生,而是返回原有物件回來。

AutoMapper 的基本建置就完成了,之後就可以輕鬆轉換物件內容,也簡潔了程式碼與加增維護的方便性,下一篇我們即將說到要怎麼在專案中紀錄Log與一些程式紀錄。

--

--