在日常開(kāi)發(fā)中,我們常常需要將一個(gè)對(duì)象映射到另一個(gè)對(duì)象,這個(gè)過(guò)程中可能需要編寫(xiě)大量的重復(fù)性代碼,如果每次都手動(dòng)編寫(xiě),不僅會(huì)影響開(kāi)發(fā)效率,而且當(dāng)項(xiàng)目越來(lái)越復(fù)雜、龐大的時(shí)候還容易出現(xiàn)錯(cuò)誤。為了解決這個(gè)問(wèn)題,對(duì)象映射庫(kù)就隨之而出了,這些庫(kù)可以自動(dòng)完成對(duì)象之間的映射,從而減少大量的開(kāi)發(fā)工作量,提高開(kāi)發(fā)工作效率。今天我們來(lái)講講在ASP.NET Core Web中使用AutoMapper快速進(jìn)行對(duì)象映射。
AutoMapper是一個(gè)簡(jiǎn)單易用的.NET對(duì)象映射庫(kù),用于快速、方便地進(jìn)行對(duì)象之間的轉(zhuǎn)換和映射,極大的簡(jiǎn)化了開(kāi)發(fā)人員在處理對(duì)象映射時(shí)的工作量。
在ASP.NET Core Web API項(xiàng)目中搜索:AutoMapper NuGet包安裝。
圖片
接下來(lái)我們分別定義一個(gè)源對(duì)象(Student)和一個(gè)目標(biāo)對(duì)象(StudentViewModel)。
public class Student { /// <summary> /// 學(xué)生ID [主鍵,自動(dòng)遞增] /// </summary> [PrimaryKey, AutoIncrement] [Display(Name = "學(xué)生ID")] public int StudentID { get; set; } /// <summary> /// 班級(jí)ID /// </summary> [Display(Name = "班級(jí)ID")] public int ClassID { get; set; } /// <summary> /// 學(xué)生姓名 /// </summary> [Display(Name = "學(xué)生姓名")] public string Name { get; set; } /// <summary> /// 學(xué)生年齡 /// </summary> [Display(Name = "學(xué)生年齡")] public int Age { get; set; } /// <summary> /// 學(xué)生性別 /// </summary> [Display(Name = "學(xué)生性別")] public string Gender { get; set; } }
public class StudentViewModel { /// <summary> /// 學(xué)生ID [主鍵,自動(dòng)遞增] /// </summary> [PrimaryKey, AutoIncrement] [Display(Name = "學(xué)生ID")] public int StudentID { get; set; } /// <summary> /// 班級(jí)ID /// </summary> [Display(Name = "班級(jí)ID")] public int ClassID { get; set; } /// <summary> /// 學(xué)生姓名 /// </summary> [Display(Name = "學(xué)生姓名")] public string Name { get; set; } /// <summary> /// 學(xué)生年齡 /// </summary> [Display(Name = "學(xué)生年齡")] public int Age { get; set; } /// <summary> /// 學(xué)生性別 /// </summary> [Display(Name = "學(xué)生性別")] public string Gender { get; set; } /// <summary> /// 班級(jí)名稱(chēng) /// </summary> [Display(Name = "班級(jí)名稱(chēng)")] public string ClassName { get; set; } }
我們可以定義一個(gè)AutoMapperMappingProfile的映射配置文件,并在其中定義源類(lèi)型和目標(biāo)類(lèi)型之間的映射關(guān)系。
using AutoMapper;using Entity;using Entity.ViewModel;namespace WebApi{ /// <summary> /// AutoMapper映射配置文件 /// </summary> public class AutoMapperMappingProfile : Profile { /// <summary> /// 添加映射規(guī)則 /// </summary> public AutoMapperMappingProfile() { CreateMap<Student, StudentViewModel>(); } }}
使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。該方法需要傳入一個(gè)Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來(lái)查找映射配置(在當(dāng)前作用域的所有程序集里面掃描AutoMapper的配置文件)。
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); //添加 AutoMapper 的配置 //使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。 //該方法需要傳入一個(gè)Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來(lái)查找映射配置(在當(dāng)前作用域的所有程序集里面掃描AutoMapper的配置文件)。 builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); }
/// <summary> /// 學(xué)生管理 /// </summary> [ApiController] [Route("api/[controller]/[action]")] public class StudentController : ControllerBase { private readonly IMapper _mapper; /// <summary> /// 依賴注入 /// </summary> /// <param name="mapper">mapper</param> public StudentController(IMapper mapper) { _mapper = mapper; } }
接下來(lái)我們使用使用IMapper接口的Map方法來(lái)進(jìn)行對(duì)象映射操作。
var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);
圖片
本文鏈接:http://www.tebozhan.com/showinfo-26-88937-0.htmlASP.NET Core Web中使用AutoMapper進(jìn)行對(duì)象映射
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com