【C#/.NET】使用Automapper映射record類(lèi)型

????????當(dāng)使用Automapper進(jìn)行對(duì)象映射時(shí),通常我們會(huì)使用POCO(Plain Old CLR Object)類(lèi)作為源對(duì)象和目標(biāo)對(duì)象。然而,自從C# 9引入了record類(lèi)型,它們提供了更簡(jiǎn)潔、不可變的對(duì)象模型。我已經(jīng)將項(xiàng)目的所有Dto都是用record類(lèi)型,但是record類(lèi)型還是有些需要注意的點(diǎn),本文將介紹如何使用Automapper將POCO映射成record的對(duì)象。

????????首先,我們需要確保已經(jīng)安裝了Automapper NuGet包??梢酝ㄟ^(guò)NuGet包管理器控制臺(tái)或者Visual Studio的NuGet包管理器來(lái)安裝

//安裝Nuget包Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection//服務(wù)注冊(cè)builder.Services.AddAutoMapper(assembly);//你的程序集

????????安裝完成后,我們可以在項(xiàng)目中引入Automapper的命名空間,以便在代碼中使用Automapper相關(guān)的功能。

????????接下來(lái),假設(shè)我們有一個(gè)POCO類(lèi)Person,具有以下屬性:

publicclassPerson{publicstringFirstName {get;set; }publicstringLastName {get;set; }publicintAge {get;set; }}

????????現(xiàn)在,我們希望將這個(gè)POCO類(lèi)映射成一個(gè)record類(lèi)型的對(duì)象PersonRecord,具有相同的屬性:

publicrecordPersonRecord(stringFirstName,stringLastName,intAge);

????????在使用Automapper之前,我們需要進(jìn)行一些配置??梢栽趹?yīng)用程序的啟動(dòng)代碼或啟動(dòng)器類(lèi)中進(jìn)行配置。以下是一個(gè)簡(jiǎn)單的配置示例:

publicclassPersonProfile:Profile{publicPersonProfile(){? ? ? ? CreateMap();? ? } }

????????在上面的代碼中,我們創(chuàng)建了一個(gè)PersonProfile類(lèi),并使用CreateMap方法來(lái)定義從Person到PersonRecord的映射。

????????現(xiàn)在,我們可以使用mapper對(duì)象來(lái)執(zhí)行映射操作了。只需調(diào)用mapper.Map方法并傳入源對(duì)象即可:

publicclassAutomapperController:ControllerBase{privatereadonlyIMapper _mapper;publicAutomapperController(IMapper mapper){? ? ? ? ? _mapper = mapper;? ? ? }? ? ? [HttpGet]publicIActionResultGet(){? ? ? ? ? Person person =new()? ? ? ? ? {? ? ? ? ? ? ? FirstName ="John",? ? ? ? ? ? ? LastName ="Doe",? ? ? ? ? ? ? Age =30};? ? ? ? ? PersonRecord personRecord = _mapper.Map(person);returnOk(personRecord);? ? ? }? }

????????通過(guò)上面的代碼,我們就將Person對(duì)象映射成了PersonRecord對(duì)象。personRecord對(duì)象將具有與person相同的屬性值。

????????值得注意的是,由于record是不可變的,因此我們只能在創(chuàng)建時(shí)初始化其屬性,無(wú)法在后續(xù)代碼中修改屬性值。因此,在映射過(guò)程中,Automapper會(huì)自動(dòng)為record類(lèi)型的目標(biāo)對(duì)象生成一個(gè)構(gòu)造函數(shù),并根據(jù)源對(duì)象的屬性值進(jìn)行初始化。

????????使用Automapper進(jìn)行POCO到record的映射還可以處理復(fù)雜的場(chǎng)景,包括嵌套對(duì)象、集合類(lèi)型等。只需在配置過(guò)程中定義適當(dāng)?shù)挠成湟?guī)則,Automapper會(huì)自動(dòng)處理屬性的映射。

????????我們了解了使用Automapper將POCO映射成record的對(duì)象的步驟。首先,我們需要安裝和配置Automapper,然后定義映射規(guī)則。最后,在需要進(jìn)行映射的地方調(diào)用mapper.Map方法即可。這樣,我們可以輕松地將POCO對(duì)象轉(zhuǎn)換為不可變的record對(duì)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容