Abp中分為自動屬性映射,和自定義映射
我們新建一個Core層作為實體層,項目也要安裝Abp Nuget Package
TestCase作為表的實體
我們先做自定義映射demo,
在Application層,新建一個創建TestCase的數據傳輸對象,用於創建實體時表單的傳入,這里不需要id所以不用繼承Entity
數據傳輸對象最好是需要就新建,不要相互之間繼承,雖然這樣可以減少代碼,但是后面維護會困難。我們創建有創建的dto,更新有更新的dto,返回的有TestCaseDto,他們之間互相獨立,不相互繼承
創建一個返回數據的dto,一般展示層需要id,我們只要繼承Entity 就可以了。
我們在dto文件夾中建一個TestCaseMapProfile類,它繼承AutoMapper的Profile,在構造方法中,創建dto 之間的映射。
我們把之前的代碼修改一下,讓ITestCaseAppService繼承IApplicationService接口。讓TestCaseAppService繼承ApplicationService,ApplicationService提供了一個ObjectMapper對象,我們可以用ObjectMapper對象在實體和數據傳輸對象之間轉換。
在Application 中我們添加對AbpAutoMapper項目的引用,代碼的作用是項目啟動會先加載Application中所有繼承Profile的類,用於做對象之間的自動映射。。
自動映射可以配置比較復雜的屬性,具體可以查看AutoMapper的用法
除了自動映射,還有另外一種用於簡單對象的屬性映射
AutoMap的雙向的,也就是TestCase 可以轉成TestCaseEditDto,TestCaseEditDto也可以轉成TestCase
AutoMapTo 只能 從TestCaseEditDto 轉成TestCase
AutoMapFrom 只能 從TestCase 轉成 TestCaseEditDto
用於 更新實體的數據傳輸對象,我們只要使用AutoMapTo就可以了,因為我們要從Dto映射成實體
這樣就可以實現映射。但是在實際的項目中,我們只需要更新我們的TestCaseEditDto中定義的屬性,原來的實體什么創建時間和創建人什么的都需要保留,
Abp 給我們提供了Map的另外一個重載方法,把原來舊實體需要保留的屬性可以保留下來,只更改表單中傳進來的屬性,也就是我們需要更改的屬性通過EditDto對外暴露