在ASP.NET CORE中使用AUTOMAPPER

普通的模型映射

现在有两个类,实体类Student和返回展示的 ViewStudentView
在这里插入图片描述
在这里插入图片描述
两个实体类字段还基本可以,不是很多,假如字段非常非常多,还需要手动去赋值的话,简直太痛苦了。
在这里插入图片描述
在这里插入图片描述
想了想这才是一个方法,一般的系统都会少则几十,多则上百个这样的方法,这还不算,大家肯定遇到过一个情况,如果有一天要在页面多显示一个字段,噗!不是吧,首先要存在数据库,然后在该实体类就应该多一个,然后再在每一个赋值的地方增加一个,而且也没有更好的办法不是,一不小心就少了一个,然后被产品测试说咱们不细心,心塞哟,别慌!神器来了,一招搞定。

先来引入DTO讲解

我们已经知道了ORMObject Relational Mapping)映射,是一种对象关系的映射,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

Automapper是一种实体转换关系的模型,AutoMapper是一个.NET的对象映射工具。主要作用是进行领域对象与模型(DTO)之间的转换、数据库查询结果映射至实体对象。

引入AutoMapper的包

在这里插入图片描述

Services层中引用Nuget包,AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection

AutoMapper.Extensions.Microsoft.DependencyInjection,这个是用来配合依赖注入的,

在项目当中,都使用依赖注入,尽量不要用new 来实例化,导致层耦合

添加映射文件 AutomapperConfig.cs

在web项目中,新建文件夹,Automapper,添加配置映射配置文件AutomapperConfig.cs,继承自Profile类,用来配置所有的映射关系。
在这里插入图片描述
这里的 Profile有什么用呢,是 services.AddAutoMapper他会自动找到所有继承了Profile的类然后进行配置。我这个类是放在Web层的,如果Profile配置放在其他的层比如Service层,如下图:直接耦合
在这里插入图片描述
使用AutoMapper实现模型映射,并注入

那此时Startup类里面的配置就可以写成 services.AddAutoMapper(Assembly.Load("Service"));它会自动加载Service的程序集并从这里面找到继承了profile类的配置实现。

如果profile配置放在了web层,那就相当于把配置类和Service层进行了解耦,那么配置中可以写
在这里插入图片描述
实现接口的方法中使用mapper
在这里插入图片描述控制器调用接口,并传输数据,最终在index页面上显示:
在这里插入图片描述
在这里插入图片描述
前端显示:
在这里插入图片描述是不是少了一个Name呢,原因是,我们配置的sourcedestination两个类的字段不是完全相同的,但是有时候这两个字段实际上是相同的。

我们可以,加上配置:
在这里插入图片描述
如果不想映射某个字段:我们还可以:
在这里插入图片描述
这样子,我们完成了映射类的配置:忽略age的映射,并将原始类的name给到StudentViewStudentName,这样子,前端显示肯定是18消失了,转而出现了张国荣字样,我们来看看是不是呢?
在这里插入图片描述哦?张国荣字样确实出来了,可为什么会多出个0呢?

原因是,在C#的数据类型当中,int类型属于值类型,是不能为空的,默认给了0,我们尝试将model实体类的age改为可空类型试试。
在这里插入图片描述前端测试如下:
在这里插入图片描述果然age消失了。好了今天的学习就到这里结束了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在 .NET 6 ASP.NET Core Web API 使用 AutoMap 的初始化和帮助类。 首先,你需要在你的项目添加 AutoMap 的 NuGet 包。在 Visual Studio ,右键点击项目,选择“Manage NuGet Packages”,然后搜索 AutoMap 并安装。 接下来,你需要创建一个帮助类来帮助你初始化 AutoMap。这个类可以是一个静态类,包含一个静态的初始化方法。这个初始化方法将会注册你的 Mapper 配置,以便在应用程序启动时自动执行。 ```csharp using AutoMapper; public static class AutoMapperConfig { public static void Initialize() { MapperConfiguration config = new MapperConfiguration(cfg => { // 在这里进行你的 Mapper 配置 cfg.CreateMap<SourceClass, DestinationClass>(); }); IMapper mapper = config.CreateMapper(); Mapper = mapper; } public static IMapper Mapper { get; private set; } } ``` 在你的 Startup.cs 文件,你可以在 ConfigureServices 方法调用这个初始化方法: ```csharp public void ConfigureServices(IServiceCollection services) { // 其他配置... AutoMapperConfig.Initialize(); } ``` 现在,你可以在你的控制器或其他服务注入 IMapper 接口,使用 AutoMap 进行对象映射了。 ```csharp using AutoMapper; public class MyController : ControllerBase { private readonly IMapper _mapper; public MyController(IMapper mapper) { _mapper = mapper; } public IActionResult MyAction() { SourceClass source = new SourceClass(); DestinationClass destination = _mapper.Map<DestinationClass>(source); // 其他代码... } } ``` 这样,你就可以在 .NET 6 ASP.NET Core Web API 使用 AutoMap 了。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值