.NET Core Dto對映(AutoMapper)
我們假設一個場景, 採用EF Core+Web Api, 這時候可能會出現EF Core中的Entity Model和在專案中使用的Model之間對應關係出現偏差, 如果使用屬性意一一對應, 不免會有大量的工作量 |
好了,接下來直接上程式碼來說明。
EntityModels.Employee.cs
public class Employee { public Guid Id { get; set; } public Guid CompanyId { get; set; } public string EmployeeNo { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public Gender Gender { get; set; } public DateTime DateOfBirth { get; set; } public Company Company { get; set; } }
Models.EmployeeDto.cs
public class EmployeeDto { public Guid Id { get; set; } public Guid CompanyId { get; set; } public string EmployeeNo { get; set; } public string Name { get; set; } public string GenderDisplay { get; set; } public int Age { get; set; } }
我們可以觀察到, 兩個實體之間有很多不同的地方, 比如名字拆分啊, 出生日期和年齡啊等等, 我之前的做法就是硬生生手寫程式碼轉換, 但是經過學習大佬們的程式碼, 發現了一個類庫, 在此算是記錄一下吧
AutoMapper.Extensions.Microsoft.DependencyInjection
可以透過NuGet安裝,使用的時候也非常簡單, 建立Profile資料夾, 新建一個EmployeeProfile類, 繼承於Profile。
public class EmployeeProfile: Profile { public EmployeeProfile() { CreateMap() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}")) .ForMember(dest => dest.GenderDisplay, opt => opt.MapFrom(src => src.Gender.ToString())) .ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year)); } }
在使用的時候只需要這樣, 注入mapper, 然後就是很簡單的操作了, 簡直了, 功能非常強大!!!
[ApiController] [Route("api/companies/{companyId}/employees")] public class EmployeesController: ControllerBase { private readonly IMapper _mapper; private readonly ICompanyRepository _companyRepository; public EmployeesController(IMapper mapper, ICompanyRepository companyRepository) { _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); _companyRepository = companyRepository ?? throw new ArgumentNullException(nameof(companyRepository)); } [HttpPost] public async Task<1actionresult> CreateEmployeeForCompany(Guid companyId, EmployeeAddDto employee) { if (!await _companyRepository.CompanyExistsAsync(companyId)) { return NotFound(); } var entity = _mapper.Map(employee); _companyRepository.AddEmployee(companyId, entity); await _companyRepository.SaveAsync(); var dtoToReturn = _mapper.Map(entity); return CreatedAtRoute(nameof(GetEmployeeForCompany), new { companyId = companyId, employeeId = dtoToReturn.Id }, dtoToReturn); } }
本文原創地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2702488/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- .NET CORE AUTOMAPPER 對映一個類的子類APP
- ASP.NET Core 中的物件對映之 AutoMapperASP.NET物件APP
- 在 ASP.NET Core 專案中使用 AutoMapper 進行實體對映ASP.NETAPP
- .net Core 使用AutoMapperAPP
- .net core3.1 AutoMapperAPP
- .net core中使用AutomapperAPP
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 用AutoMapper搞定物件對映APP物件
- Asp.NetCore 3.1 使用AutoMapper自動對映轉換實體 DTO,Data2ViewModelASP.NETNetCoreAPPView
- Javascript - 物件對映automapper介紹JavaScript物件APP
- .Net core 中 AutoMapper的應用APP
- ASP.NET Core-自動對映ASP.NET
- (精華)2020年7月3日 ASP.NET Core AutoMapper實現類的相互對映(工具版)ASP.NETAPP
- .NET Core 中AutoMapper的配置及使用APP
- .Net Core中更高階的AutoMapper示例APP
- 【ASP.NET Core】動態對映MVC路由ASP.NETMVC路由
- 在.net中使用AutoMapper進行物件對映,物件相互轉,簡單方便APP物件
- asp.net core 3.1.x 中使用AutoMapperASP.NETAPP
- 在ASP.NET Core MVC 2.2 中使用AutoMapperASP.NETMVCAPP
- 【5min+】 物件對映只有AutoMapper?試試Mapster物件APP
- SpringBoot中能在控制器中對映dto嗎?Spring Boot
- ASP.NET Core擴充套件庫之實體對映ASP.NET套件
- .Net Core AutoMapper自定義擴充套件方法的使用APP套件
- Util應用框架基礎(二) - 物件到物件對映(AutoMapper)框架物件APP
- .net framework autoMapper使用FrameworkAPP
- EntityFramework Core如何對映動態模型?Framework模型
- Redis OM .NET Redis物件對映框架Redis物件框架
- AutoMapper如何全域性配置map條件過濾null值空值對所有對映起效APPNull
- MongoDB via Dotnet Core資料對映詳解MongoDB
- DTO、儲存庫和資料對映器在DDD中的作用 | Khalil Stemmler
- 《Asp.Net Core3 + Vue3入坑教程》 - 3.AutoMapper & Restful API & DIASP.NETVueAPPRESTAPI
- .NET平臺系列22:.NET Core/.NET5/.NET6 對比 .NET FrameworkFramework
- 關於 .NET Core(.NET Core 指南)
- 體驗.NET Core使用IKVM對接JavaJava
- 對映
- C# 資料操作系列 - 6 EF Core 配置對映關係C#
- .NET Core
- .Net 常用ORM框架對比:EF Core、FreeSql、SqlSugerORM框架SQL