【问题标题】:Left right DTO to object AutoMapper- C#左右 DTO 到对象 AutoMapper-C#
【发布时间】:2018-04-26 06:42:06
【问题描述】:

我们最近实施了自动映射器,目前正在寻求优化从 DTO 到模型的赋值。目前我们正在做类似的事情

model.Property1 = dto.Property1;
model.SomePropertyType = dto.PropertyType;
model.Property2 = dto.Property2; 

现在这对所有 Mapper 类来说可能是一项相当长且重复的任务。 有没有办法在 AutoMapper 上简化这个?

【问题讨论】:

  • 我不明白,automapper 是为您删除简单的绑定,如 model.Property1 = dto.Property1;和model.Property2 = dto.Property2; .您只需要注册您的映射( CreateMap();) (使用配置文件),然后使用映射器接口 _mapper.Map(x)...简单绑定(相同类型,相同名称)是由 automapper 处理。

标签: c# automapper dto


【解决方案1】:

如果您使用的是Automapper,那么您没有定义地图(配置文件)吗?我相信,您可能已经定义了这些,所以请使用它们来指导Automapper 如何将源对象映射到目标。

另一点Automapper 也基于命名约定,因此如果您在源和目标中具有相同的属性名称,那么它将自动自动映射。所以你没有必要定义它的映射。要覆盖某个属性(或其名称/类型不匹配)的映射,您可以使用.ForMember 方法。

cfg.CreateMap<MyDTO, MyModel>()

                .ForMember(destination => destination.PropertyType,

               opts => opts.MapFrom(source => source.SomePropertyType ));

您可以在here 阅读有关Automapper 的信息。

现在在代码中获取映射对象,像这样使用它

Mapper.Map<MyModel>(object of MyDTO);

【讨论】:

  • 如果有多个不匹配的名称怎么办?
  • 如果名称不匹配,如果需要填充目标对象属性,则需要使用ForMember 定义映射。如果源具有不应映射到目标的属性(如果名称相同),则使用ForMember 中的Ignore 方法,如果目标属性不存在则不要做任何事情。
猜你喜欢
  • 1970-01-01
  • 2018-01-03
  • 2021-11-14
  • 2015-01-19
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
相关资源
最近更新 更多