OOM框架AutoMapper基本使用(2)
出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要的信息,大大增强数据安全性。
下面给出两个相互对应的关系模型User、UserDto
public class User
{private const int NameMaxLength = 20;private const int PassWordMaxLength = 16;[Key]public long Id { get; }[MaxLength(NameMaxLength)]public string Name { get; set; }[MaxLength(PassWordMaxLength)][DataType(DataType.Password)]public string PassWord { get; set; }
}
public class UserDto
{private const int NameMaxLength = 20;private const int PassWordMaxLength = 16;[MaxLength(NameMaxLength)]public string Name { get; set; }[MaxLength(PassWordMaxLength)]public string PassWord { get; set; }
}
这里将 Id 定义为自增长主键,在注册页面,这个 Id 应不可见,这个时候使用Dto的好处就体现出来了,这个时候,在存入数据库时会涉及到 UserDto 往 User 的类型转换,按照之前的经验,肯定可以按照下面这样来写:
user.Name=userDto.Name;
user.PassWord=UserDto.PassWord;
这样的转换固然可以,但是如果一个 User 对象足够复杂,有十几个甚至二十几个属性,这个时候这种写法就会显得十分笨拙。
这个时候我们就可以借助AutoMapper来帮助我们完成 UserDto 到 User 的转换了。
首先安装Nuget包
在 Tools - Nuget Package Manage - Package Manage Console 输入
Install-Package AutoMapper
安装相应的Nuget包。
根据 Github 上给出的帮助文档来看,有两种方法可以创建映射,一种是静态的 Initalize 一种是动态创建。
下面使用两种不同的方法来进行单元测试
public void Using_Initlalize_Test(){UserDto dto = new UserDto{Name = "Niko",PassWord = "1234",};Mapper.Initialize(ctx => ctx.CreateMap<UserDto, User>());User user = Mapper.Map<UserDto, User>(dto);user.Name.ShouldBe("Niko");user.PassWord.ShouldBe("1234");user.Id.ToString().ShouldBe("0");}public void Using_MapperConfiguration_Test(){var config = new MapperConfiguration(ctx => ctx.CreateMap<UserDto, User>());var mapper = config.CreateMapper();// var mapper = new Mapper(config);UserDto dto = new UserDto{Name = "Niko",PassWord = "1234",};User user = mapper.Map<User>(dto);//User user = Mapper.Map<User>(dto);user.Name.ShouldBe("Niko");user.PassWord.ShouldBe("1234");user.Id.ToString().ShouldBe("0");}
这里使用到 Shouldly 断言框架,具体用法参考官方文档。
写完规则之后 通常会调用 AssertConfigurationIsValid 方法,检查规则是否完整
Mapper.AssertConfigurationIsValid();
两种方法,单元测试均通过。这样的话,借助 Automapper 处理复杂的对象映射,将大大简化我们的代码量。
为了更加便捷地使用 AutoMappper ,对AutoMapper进行扩展
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) return default(T);Mapper.Initialize(ctx=>ctx.CreateMap(obj.GetType(),typeof(T)));return Mapper.Map<T>(obj);}/// <summary>/// 集合到集合/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <returns></returns>public static List<T> MapTo<T>(this IEnumerable obj ){if (obj == null) throw new ArgumentNullException();Mapper.Initialize(ctx => ctx.CreateMap ( obj.GetType(), typeof(T))) ;return Mapper.Map<List<T>>(obj);}
}
使用上面的方法进行单元测试:
public void testme(){UserDto dto = new UserDto{Name = "Niko",PassWord = "1234",};User user=dto.MapTo<User>();user.Name.ShouldBe("Niko");user.PassWord.ShouldBe("1234");user.Id.ToString().ShouldBe("0");}
转载于:https://www.cnblogs.com/llhhll/p/7810153.html
OOM框架AutoMapper基本使用(2)相关推荐
- 可能是.NET领域性能最好的对象映射框架——Mapster
我之前文章提到过 MediatR 的作者 Jimmy Bogard,他也是大名鼎鼎的对象映射框架 AutoMapper 的作者.AutoMapper 的功能强大,在 .NET 领域的开发者中有非常高的 ...
- 使用Spring Boot搭建你的第一个应用程序
文章目录 依赖配置 main程序配置 MVC配置 安全配置 存储 Web 页面和Controller 异常处理 测试 结论 Spring Boot是Spring平台的约定式的应用框架,使用Spring ...
- 如何在 ASP.NET Core 中写出更干净的 Controller
你可以遵循一些最佳实践来写出更干净的 Controller,一般我们称这种方法写出来的 Controller 为瘦Controller,瘦 Controller 的好处在于拥有更少的代码,更加单一的职 ...
- python语言设计二级教程答案2019_全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案...
第二章 Python语言基本语法元素 一.选择题 C B B C A D B A D B 二.编程题 1.获得用户输入的一个整数N,计算并输出N的32次方. 在这里插入图片描述 2.获得用户输入的一段 ...
- 【Mybatis源码】源码分析
[Mybatis源码]源码分析 (一)Mybatis重要组件 [1]四大核心组件 (1)SqlSessionFactoryBuilder (2)SqlSessionFactory (3)SqlSess ...
- $.ajax的async参数,jquery的$.ajax async使用详解
async在jquery ajax中是一个同步参数了,我们下面来给大家介绍在jquery ajax中使用async时碰到的一些问题与方法介绍,希望例子能给各位同学带来一些帮助哦. async默认是tr ...
- 阿里企业金融阿里云实习一面复盘
我算法好慌 企业金融(55min)是昨天晚上录音没录上我去,伤心.除了项目我MQ的防止消息重新消费没回答的多好,其他的基本都回答上来了.凭着记忆说一下把,不是太全,项目问了大概有20-30分钟 阿里云 ...
- AutoMapper在ABP框架中的使用说明
为了说明AutoMapper如何使用,我专门开设了一个专题来讲,如果您还没有查看该专题,请点击这里.既然系统地学习了AutoMapper,那么接下来就是该用它实战的时候了.今天,我们就来揭开AutoM ...
- java写入excel文件内存不足,java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架...
产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件. 需求分析 对于 excel 导出,是一个很常见的需求. 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件. 客 ...
- 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...
最新文章
- 开源的视频笔记合集: 陌溪 / LearningNotes
- Java Word break analysis
- Burst Balloons
- 一个简单企业信息网站架构
- 行程匹配的算法python_节约里程算法的python实现
- 新型脑刺激疗法治疗重度抑郁症
- 计算机网络故障是指啥,网络故障管理
- oracle_java.exe,系统找不到C:\ProgramData\Oracle\Java\javapath\java.exe问题及解决方案
- 面试官的一些问题,给予小伙伴们一些帮助。
- Revit二次开发之绘制钢筋
- 云客服让每一个企业客户都成为座上宾
- 人工智能与数据挖掘的关系
- C语言结构体实现简单通讯录管理系统
- vs2019开发android应用,VS 2019开发APP(一)界面和代码
- 对数线性模型(Log-Linear Model)一种判别式模型的创建框架
- 2022年轨道交通行业研究报告
- Android列表ListView控件的使用
- 山西最新道路运输安全员模拟真题集及答案解析
- 【案例】郑州商品交易所:搭建AI预测模型,提升智能决策水平
- uniapp小程序更改swiper指示点样式