2014年3月2日 星期日

AutoMapper - Complex Type 的資料對映

有時候建立類別並不會單純只使用一般的資料型別來定義屬性,很多時候也是會使用我們所定義的類別作為屬性的型別,最常見的就是在 ASP.NET MVC 所使用的 ViewModel 或是 DTO 資料傳輸物件類別,要如何處理這樣的資料對映呢?

接下來將會說明不同的資料對映使用方式。

 


使用方式一

image

上面所定義的類別是最常見的,再一個自定義類別裡的屬性其型別為另一個自定義類別,因為是直接從資料庫取得 Customer 資料,因為資料來源都在 Customer 物件裡,所以使用 AutoMapper 做資料對映就沒有什麼複雜操作,

image

執行結果

image

 

 

使用方式二

這邊另外建立了一個 OrderModel 的類別,然後原來的 ComplexModel 增加一個型別為 OrderModel 的屬性,這個屬性要放的資料就只有 OrderID 與 OrderDate,

image

因為一個 Customer 會有多個 Order 資料,所以只會取第一筆 Order 的 OrderID 與 OrderDate 放進 OrderModel 中,而多了這麼一個屬性後,該怎麼使用 AutoMapper 定義資料的對映呢?

如果是使用以下的設定方式,在執行的時候是會有錯誤的,

image

可以使用以下的設定方式,這邊要特別留意在對映 OrderModel 的時候必須要先建立 instance,

image

執行結果

image

 

使用方式三

上面的兩種方式雖然都是可以一次就完成資料對映的設定,不過這次換個方式來做,雖然看起來比上面的方式要繁瑣一些,但程式結構是比較蠻清楚的,

image

 

第二、三種使用方式所執行的結果都是相同,在實際使用上就要看狀況來選擇使用。

 

以上

3 則留言:

  1. 請問一下像這句最後要怎麼回傳TASK的型別啊??也就是如何回傳非同步的方式呢??
    var result =Mapper.Map(ownExpenseH);
    return result;

    不知道您是否有嘗試過呢?

    回覆刪除
    回覆
    1. 我不太明白為何最後的資料對映轉換會需要使用到非同步的方式來操作?

      刪除
  2. 不好意思是我搞錯了,是我的回傳的類別搞錯了,我以為是非同步的關係.............

    回覆刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。