ASP.NET Core实现对象自动映射-AgileMapper
我们为什么要在对象之间做映射
处于耦合性或者安全性考虑或者性能考虑我们不希望将Model模型传递给他们,我们会在项目中创建一些DTO(Data transfer object数据传输对象),进行数据的传输.
概述
AgileMapper是一个零配置、高度可配置的对象-对象映射器,具有可查看的执行计划,目标是.NET Standard 1.0+和.NET 3.5+.他执行查询映射、对象创建、深度克隆、id感知更新和合并,可以通过扩展方法、静态API或实例API使用.
快速开始
通过NuGet安装AgileMapper
PM> Install-Package AgileObjects.AgileMapper
基本用法
对象创建
使用以下方法从另一个创建对象
var customer = Mapper.Map(customerViewModel).ToANew<Customer>();
// Or:
var customer = customerViewModel.Map().ToANew<Customer>();
查询映射
使用实体到另一个类型的使用
var customerVm = await dbContext
.Customers
.Project().To<CustomerViewModel>()
.FirstAsync(c => c.Id == customerId);
深度克隆
var clonedCustomer = Mapper.DeepClone(customerToBeCloned);
// Or:
var clonedCustomer = customerToBeCloned.DeepClone();
更新
使用一下命令更新对象的成员与另一个值
Mapper.Map(customerSaveRequest).Over(customer);
// Or:
customerSaveRequest.Map().Over(customer);
合并
使用以下方法将对象未填充成员与另一个的值合并
Mapper.Map(customerDto).OnTo(customer);
// Or:
customerDto.Map().OnTo(customer);
忽略成员
其中有没有目标成员匹配,兼容源成员默认情况下忽略,但你也可以告诉映射器忽略他.
public class OrderDto
{
public int Id { get; set; }
} public class Order
{
public int? Id { get; set; }
public DateTime DateCreated { get; set; }
}
Order.DateCreated将被忽略,因为OrderDto没有匹配到,但是Id属性将被更新,这一块可以停止更新
Mapper.WhenMapping
.From<OrderDto>() // 从OrderDto映射
.To<Order>() // 将忽略订单创建更新合并
.Ignore(o => o.Id); // 忽略了Id属性
忽略多个字段,并且成立忽略条件
Mapper
.Map(orderDto).Over(order, cfg => cfg
.If((dto, o) => dto.Id == 0) // 忽略 OrderDto.Id为0
.Ignore(
o => o.Id,
o => o.DateCreated); // 忽略Id和DateCreated
空结果
如果目标类成员没有匹配到,可以将他映射为null
例如:
var source = new { Name = "Frank" };
var target = new Person { Name = "Charlie", Address = default(Address) };
Mapper.Map(source).Over(target);
配置复杂类型返回null不进行实例化
Mapper.WhenMapping
.ToANew<Address>()
.If((o, a) =>
string.IsNullOrWhiteSpace(a.Line1) ||
string.IsNullOrWhiteSpace(a.Postcode))
.MapToNull();
ASP.NET Core实现对象自动映射-AgileMapper的更多相关文章
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- Asp.net core中实现自动更新的Option
Asp.net core可以监视json.xml等配置文件的变化, 自动刷新内存中的配置内容, 但如果想每隔1秒从zookeeper.consul获取最新的配置信息, 需要自己实现. 阅读了 Asp. ...
- ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action
最近由于发现奇怪的 System.Data.SqlClient 性能问题(详见之前的博文),被迫提前了向 .NET Core 3.0 的升级工作(3.0 Preview 5 中问题已被修复).郁闷的是 ...
- asp.net core 核心对象解析
首先声明这篇文章的所有内容均来自https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html ----感谢大内老A(artec ...
- 在Asp .net core 中通过属性映射实现动态排序和数据塑形
目录 属性映射服务实现 动态排序 数据塑形 属性映射服务实现 public class PropertyMappingValue { public IEnumerable<string> ...
- 在ASP.NET Core中实现自动注入、批量注入
我们在使用AddScoped.AddTransient.AddSingleton这类方法的时候很是麻烦.我们每增加一个接口以及其实现的时候,是不是需要在这里硬编码注册一行代码呢?项目小还好,但当我们的 ...
- CentOS7下让Asp.Net Core的网站自动运行
一.安装Nginx yum install nginx 二.配置Nginx vi /etc/nginx/nginx.conf location / { proxy_pass http://127.0. ...
- 如何为ASP.NET Core的强类型配置对象添加验证
原文: Adding validation to strongly typed configuration objects in ASP.NET Core 作者: Andrew Lock 译文: La ...
随机推荐
- CSDN 免积分下载
你可能不相信这个标题,那么打开下面的链接试试吧 ↓↓↓ Github项目 最新功能 ↓↓↓ 0积分资源搜索 0积分资源搜索(备用地址) CSDN资源导出 CSDN资源下载体验群 (每日可免费下载一次) ...
- MyBatis 文档 完整版
框架技术 1.框架技术 01.是一个应用程序的半成品 02.提供可重用的公共结构 03.按一定规则组织的一组组件 2.分析优势 01.不用再考虑公共问题 02.专心的业务实现上 03.结构统一,易于学 ...
- Could not launch "APP_NAME" process launch failed: 4294967295
真机调试忽然遇到这个问题, Could not launch "APP_NAME" process launch failed: 如图所示: 模拟器上能正常调试………… 这个问题还 ...
- Docker部署ELK 日志归集
ELK ELK是Elasticsearch.Logstash.Kibana的缩写,使用ELK的原因是因为公司使用Spring cloud部署了多个微服务,不同的微服务有不同的日志文件,当生产上出现问题 ...
- Docker 容器高级操作[Docker 系列-3]
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...
- 戴尔PowerEdge T110 Ⅱ服务器U盘安装Windows Server 2019 DataCenter
一. 下载准备 准备工作——下载Microsoft Windows Server 2019 官方简体中文激活版 (MSDN)原版iso镜像 准备工作——安装刻录软件UltraISO,单文件绿色版就够用 ...
- 启动Eclipse提示找不到虚拟机
由于硬盘坏了,把所有东西都清光了,今天重新安装Eclipse,出现了一点小插曲 安装的时候出现了这个画面,以前安装也是照着[软件安装管家]的发布装的,幸好还懂得几个英文单词,看了一下提示信息,直译:[ ...
- HBase MapReduce 一些 ClassNotFoundException 所缺少的jar包
我们在用 java 操作 HBase 时,可能会出现相关的 ClassNotFoundException 等异常信息,但是我们又不想把 HBase lib 下的所有jar包全部导入到工程,因为会有 ...
- java并发编程(十)----JUC原子类介绍
今天我们来看一下JUC包中的原子类,所谓原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程),原子操作可以是 ...
- 二、java实现多线程的方式?
一.同步?异步? 下面两幅图解释了同步异步. 二.实现多线程的方式 1.继承Thread package threaddemo; class CreateThreadDemo extends Thre ...