這篇文章將為大家詳細(xì)講解有關(guān)C#中如何使用AutoMapper,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、網(wǎng)絡(luò)營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊(cè)、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都不銹鋼雕塑行業(yè)客戶提供了網(wǎng)站營銷推廣服務(wù)。AutoMapper主要將Model轉(zhuǎn)換為DTO,DTO更注重?cái)?shù)據(jù),對(duì)領(lǐng)域?qū)ο筮M(jìn)行合理封裝,從而不會(huì)將領(lǐng)域?qū)ο蟮男袨檫^分暴露給表現(xiàn)層。
先來看一點(diǎn)實(shí)例,兩個(gè)類之前的映射。
首先定義兩個(gè)類Source與DTOSource:
public class Source { public int Id { get; set; } public string Content { get; set; } } public class DTOSource { public int Id { get; set; } public string Content { get; set; } }
Source與DTOSource字段完全相同,來看看它倆如何通過AutoMapper轉(zhuǎn)換,代碼很簡單。
Mapper.Initialize(x=>{ x.CreateMap
第一步建立Source到DTOSource之間的映射,初始化一個(gè)Source實(shí)例后,來看下執(zhí)行結(jié)果:
執(zhí)行完成后,可以看到dto中的數(shù)據(jù)與之前初始化的s的數(shù)據(jù)是一樣的,就像是直接將s拷貝了一份給dto,在兩個(gè)類字段名定全相同的情況下如此,那么如果DTOSource中的字段名與Source中的不相同如何,其實(shí)也很簡單,只需
要改成一點(diǎn)點(diǎn)的代碼既可:
我們將DTOSource中的Content的字段名改成Desc,此時(shí)只需要建立映射關(guān)系時(shí),指定字段就可以了:
1 Mapper.Initialize(x => { 2 x.CreateMap
來看看運(yùn)行結(jié)果如何;
可以看到與之前的運(yùn)行結(jié)果是相同的。
那么如何映射兩個(gè)List,其實(shí)也很簡單,和上述代碼幾乎可以說是無差別,只是在最后一步時(shí),要做一點(diǎn)點(diǎn)的修改就可以了。如下面代碼:
Mapper.Initialize(x => { x.CreateMap
可以看到除了最后一句代碼,其它幾乎是完全相同的,只是在最后一句代碼中,目標(biāo)類型改成了List
結(jié)果符合預(yù)期。
在實(shí)際的項(xiàng)目中,這樣的寫法肯定是不符合要求的,一般會(huì)做一個(gè)封裝,新建一個(gè)SourceProfile繼承自Profile:
1 public SourceProfile() 2 { 3 base.CreateMap
所有映射關(guān)系都可以寫在這一個(gè)類里,只需要在程序初始化的時(shí)候調(diào)用一次就可以了:
1 Mapper.Initialize(x =>{ x.AddProfile(); });
博主使用的AutoMapper版本6.1.1.0,因?yàn)锳utoMapper在6.0版本時(shí)移除了Profile中的Configure,所以與6.0版本以下寫法有點(diǎn)不同,6.0以下版本寫法為:
public class SourceProfile : Profile { protected override void Configure() { CreateMap
繼承Profile重寫其Configure即可,調(diào)用方式與上述沒有太大差別。 Mapper.Initialize中可添加一個(gè)或多個(gè)Profile。
在MVC項(xiàng)目的應(yīng)用中,可以將Mapper.Initialize封裝到一個(gè)類里;
public static class AutoMapperForMvc { public static void Register() { Mapper.Initialize(x => { x.AddProfile(); }); } }
進(jìn)而在MVC的Global中進(jìn)一次性注冊(cè):
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //注冊(cè) AutoMapperForMvc.Register(); } }
關(guān)于C#中如何使用AutoMapper就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。