上下观古今,起伏千万途。这篇文章主要讲述ASP.NET Core实现对象自动映射-AgileMapper相关的知识,希望能为你提供帮助。
原文: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
基本用法
对象创建
使用以下方法从另一个创建对象
?
123 | var customer = Mapper.Map(customerViewModel).ToANew<
Customer>
();
// Or: var customer = customerViewModel.Map().ToANew<
Customer>
();
|
使用实体到另一个类型的使用
?
1234 | var customerVm = await dbContext
.Customers
.Project().To<
CustomerViewModel>
()
.FirstAsync(c =>
c.Id == customerId);
|
?
123 | var clonedCustomer = Mapper.DeepClone(customerToBeCloned);
// Or: var clonedCustomer = customerToBeCloned.DeepClone();
|
使用一下命令更新对象的成员与另一个值
?
123 | Mapper.Map(customerSaveRequest).Over(customer);
// Or: customerSaveRequest.Map().Over(customer);
|
使用以下方法将对象未填充成员与另一个的值合并
?
123 | Mapper.Map(customerDto).OnTo(customer);
// Or: customerDto.Map().OnTo(customer);
|
其中有没有目标成员匹配,兼容源成员默认情况下忽略,但你也可以告诉映射器忽略他.
?
01020304050607080910 | public class OrderDto {
public int Id { get ;
set ;
} }
public class Order {
public int ? Id { get ;
set ;
}
public DateTime DateCreated { get ;
set ;
} } |
?
1234 | Mapper.WhenMapping
.From<
OrderDto>
()
// 从OrderDto映射
.To<
Order>
()
// 将忽略订单创建更新合并
.Ignore(o =>
o.Id);
// 忽略了Id属性 |
?
123456 | 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
例如:
?
123 | var source = new { Name = "Frank" };
var target = new Person { Name = "Charlie" , Address = default (Address) };
Mapper.Map(source).Over(target);
|
?
123456 | Mapper.WhenMapping
.ToANew<
Address>
()
.If((o, a) =>
string .IsNullOrWhiteSpace(a.Line1) ||
string .IsNullOrWhiteSpace(a.Postcode))
.MapToNull();
|
!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->!-->
推荐阅读
- UiAutomator和Appium之间的区别2
- u盘打开盘制作软件,本文教您如何制作u盘打开盘
- u盘读不出来,本文教您u盘读不出来如何修好
- 金士顿u盘写保护,本文教您解除U盘写保护
- 映泰,本文教您映泰主板bios怎样设置u盘打开
- u盘提示写保护,本文教您u盘提示写保护怎样办
- 笔记本系统,本文教您笔记本U盘怎样安装win8系统
- u盘杀毒_本文教您U盘杀毒软件
- 技嘉主板,本文教您技嘉主板如何设置U盘打开