.NET Core Dto映射(AutoMapper)
程序员文章站
2022-06-30 17:46:45
# .Net Core Dto映射(AutoMapper) 我们假设一个场景, 采用EF Core+Web Api, 这时候可能会出现EF Core中的Entity Model和在项目中使用的Model之间对应关系出现偏差, 如果使用属性意一一对应, 不免会有大量的工作量, 上代码 EntityMo... ......
.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<employee, employeedto>() .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<actionresult<employeedto>> createemployeeforcompany(guid companyid, employeeadddto employee) { if (!await _companyrepository.companyexistsasync(companyid)) { return notfound(); } var entity = _mapper.map<employee>(employee); _companyrepository.addemployee(companyid, entity); await _companyrepository.saveasync(); var dtotoreturn = _mapper.map<employeedto>(entity); return createdatroute(nameof(getemployeeforcompany), new { companyid = companyid, employeeid = dtotoreturn.id }, dtotoreturn); } }
上一篇: C# 加载配置文件
推荐阅读
-
.NET CORE中使用AutoMapper进行对象映射的方法
-
.NET Core 3终结点不能映射控制器
-
(28)ASP.NET Core AutoMapper组件
-
在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
-
NetCore+AutoMapper多个对象映射到一个Dto对象
-
.NET Core中依赖注入AutoMapper的方法示例
-
asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转
-
.NET Core Dto映射(AutoMapper)
-
ASP.NET Core扩展库之实体映射使用详解
-
ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射