當AutoMapper要轉換的目的物件欄位較多時的處理方式

  • 930
  • 0

當AutoMapper要轉換的目的物件欄位較多時的處理方式

Git:https://github.com/albert018/Lab_MappingLessFiledsIntoDb

 

情境:系統架構有拆分不同的 Layer,並且 Model Layer 內的物件是由 EntityFramework 所產生的 Entity Class。由於 Entity Class  的欄位有些是非必要的,所以在 Layers 間傳遞時會會再新增 DTO 的物件。

 

問題:DTO 內的欄位勢必會少於 Entity Class 的欄位,如果是在操作更新資料的動作時,要如何讓 DTO Map to Entity Class 的時後也能將 Entity Class 多的欄位處理到,並且不該動到的欄位資料也不會有錯。

 

作法:

先展示 DTO Class  的結構

 

 

 

再來是 Entity Class 的結構,可看出所需的欄位數較多。

 

 

 

New 一個 DTO 的類別

 

 

 

接著需要一個 Entity Class 的類別

 

 

 

有問題的 Map 寫法。此寫法只會將 DTO 有的欄位寫過去,其餘沒有的欄位,則一律空值或預設值,但這樣的結果不正確。

 

 

 

修改後的 Map 寫法。把原本值的物件一併放到 Map 函數內,則有少的欄位會用所傳入的 Destination 物件來寫入。

 

 

 

用第二種 Map 的方式,則可確保在操作更新資料的動作時,不會去動到不該動的欄位。