netcore 2.2 封装 AutoMapper
程序员文章站
2023-11-15 16:44:52
在上篇中我们通过创建一个类并继承autoMapper的Profile类 public class Mappings : Profile { public Mappings() { CreateMap(); } } 这样做有一种弊端,就是当传输对象很多的时候,还需要手 ......
在上篇中我们通过创建一个类并继承automapper的profile类
public class mappings : profile { public mappings() { createmap<userdto, tbuser>(); } }
这样做有一种弊端,就是当传输对象很多的时候,还需要手动一个个的配置映射关系,维护起来相对来说也比较麻烦。
封装automapper
创建automapperextension扩展类
/// <summary> /// automapper扩展类 /// </summary> public static class automapperextension { /// <summary> /// 将源对象映射到目标对象 /// </summary> /// <typeparam name="t">实体类型</typeparam> /// <param name="obj">源对象</param> /// <returns>转化之后的实体</returns> public static t mapto<t>(this object obj) { if (obj == null) throw new exception("异常"); var config = new mapperconfiguration(ctx => ctx.createmap(obj.gettype(), typeof(t))); var mapper = config.createmapper(); return mapper.map<t>(obj); } /// <summary> /// 将源对象映射到目标对象 /// </summary> /// <typeparam name="t">实体类型</typeparam> /// <param name="dto">源对象</param> /// <param name="entity">目标对象</param> /// <returns>转化之后的实体</returns> public static t map<t>(object dto, t entity) { var config = new mapperconfiguration(ctx => ctx.createmap(dto.gettype(), typeof(t))); var mapper = config.createmapper(); var newmodel = mapper.map(dto, entity); return newmodel; } }
修改业务层
去掉构造函数中imapper注入
去掉启动类startup.cs中 services.addautomapper(typeof(mappings)) 方法
/// <summary> /// 添加用户 /// </summary> /// <param name="dto">实体传输对象</param> /// <returns></returns> public int add(userdto dto) { //var info = _mapper.map<userdto, tbuser>(dto); var info = dto.mapto<tbuser>(); info.addtime = datetime.now; info.userid = guid.newguid().tostring("n"); //var user = new tbuser //{ // userid = guid.newguid().tostring("n"), // email = dto.email, // username = dto.username, // addtime = datetime.now //}; _dbcontext.add(info); return _dbcontext.savechanges(); } /// <summary> /// 编辑用户信息 /// </summary> /// <param name="dto">实体传输对象</param> /// <returns></returns> public int update(userdto dto) { var user = _dbcontext.tbusers.find(dto.userid); if (user == null) throw new exception("获取用户信息失败"); //user.username = dto.username; //user.email = dto.email; automapperextension.map(dto, user); return _dbcontext.savechanges(); }
运行测试
跟封装前一样的效果
下一篇: ThinkPHP添加更新标签的方法
推荐阅读
-
netcore 2.2 封装 AutoMapper
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之七使用JWT生成Token(个人见解)
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十一Swagger使用一
-
netcore 2.2 使用 Autofac 实现自动注入
-
netcore 2.2 使用 AutoMapper 实现实体之间映射
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十数据库基础方法的封装
-
我的第一个netcore2.2 api项目搭建(三)
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之九如何进行用户权限控制
-
.NetCore学习笔记:四、AutoMapper对象映射
-
NetCore3.1webApi + EFCore + DI 框架封装