.Net Core2.2 使用 AutoMapper進行實體轉換


一、遇到的問題

  在. Core Api 的編寫中,我們經常會對一些功能點進行新增編輯操作,同時我們有時也會進行查詢,但是我們查詢的表的數據與我們返回的數據相差甚大,這是我們有需要自己手動進行類型的轉換,去輸出我們需要的類型。在添加和修改的時候我們也是需要傳入A類型然后轉換成我們需要的B類型去進行數據庫的添加。其中我們就會寫許多的簡單重復代碼,但是又不能不寫。那么我們如何去避免這種情況呢?下面介紹的AutoMapper進行對象映射,可以很方便快捷的幫助我們解決這個問題。

二、AutoMapper介紹及安裝配置

  本次案例使用的是.Net Core 2.2和AutoMapper(8.0.0)以及AutoMapper.Extensions.Microsoft.DependencyInjection(6.0.0)。在我們安裝Nuget包之后我們需要創建一個配置類來繼承AutoMapper的Profile類,這里我們暫且命名是MapperConfig,同時我們還需要在Startup.cs中注入AutoMapper和剛剛我們創建MapperConfig文件。

  我們在使用Mapper的時候我們可以選擇使用依賴注入到控制器中使用,也可以直接using引用使用

  到這里我們基礎的配置就算好了,那我們一起看下我們怎么去使用AutoMapper進行實體映射轉換吧。

三、詳細使用介紹

  1. 1.    一對一的對應字段實體轉換

    我們看到上面就是我們需要轉換的實體類和Dto了,對於簡單這種轉換我們,我們需要在Mapper配置文件中創建一個對應轉換關系,然后一行代碼進行轉換。

 

  1. 2.     一對一不對應字段轉換

    上面我們轉換對象都是一對一的轉換,都有對應的轉換關系。那么我們在實體和Dto中有不對應的關系時我們該如何轉換呢?

 

    就如這樣,我們將實體類User轉換UserAppointModel類,我們該如何轉換呢?如果我們通過第一種轉換方式的話,我們會發現Time這個字段是空的,這里我們就需要加額外的配置了,保證User的CreateTime字段可以轉換成UserAppointModel的Time字段。

 

    這里我們使用的是ForMember(),它是對單個成員進行自定義配置的一個方法,也就是說如果還有其他的不對應字段我們依然可以在后面進行自定義配置,使其對應轉換。

 

  1. 3.     多表對應一個Dto進行轉換

    我們除了遇到一對一簡單轉換和特殊字段轉換外,我們有時還會遇到多對一的實體轉換,例如我們有些時候在Api返回的時候需要對主表和副表的數據進行整合返回成一個實體。這種情況我們怎么返回呢?現在我們看下面的這個案例:

 

 

    我們需要把User實體和UserInfo實體轉換成UserInfoModel進行輸出。邏輯還是這個邏輯,我們需要先轉換一個實體,然后在前一個實體的基礎上進行另外一個實體轉換。那么能不能連續Map兩次呢?想法是這個想法,可惜在AutoMapper原有基礎上不支持這種寫法,不過我們可以重寫其方法達到這種效果。

    這里我們可以先創建一個非泛型靜態類MapperTest,然后我們在里面寫下以下方法:

 

    這就是我們重寫方法了,這樣也就可以實現我們上面的想法了。在第一次轉換的基礎上進行第二轉換,也就實現了多對一的轉換了。

 

  1. 4.     集合對應轉換

    我們如何進行集合對集合的轉換呢?集合與集合之間的轉換呢與之前的一對一轉換類似,只是我們轉換的時候傳的類型不是實體,而是List<>集合而已。下面看下User集合轉換成UserModel集合的案例:

 

四、寫在后面

  在平常的代碼中,我們經常會寫一些重復的簡單代碼,如創建,修改輸出實體轉換。都是new實體一個一個轉換去寫,偶爾寫那么一兩個也還行,寫的多了就有點浪費時間和精力了。本文介紹的是在.Net Core2.2中使用AutoMapper進行實體映射轉換的,下一篇將介紹.Net Core3.0 AutoMapper9.0的使用與.Net Core2.2中的差別。

 項目地址


 用愛生活,你會使自己幸福!用愛工作,你會使很多人幸福!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM