首页 > 解决方案 > 如何在 AutoMapper 中解析多属性映射的源成员?

问题描述

我有 DO 和 DTO 课程:

public class DO
{
   public int Property1 { get; set; }
   public int Property2 { get; set; }
}

public class DTO
{
   public int MappedProperty1 { get; set; }
   public int MappedProperty2 { get; set; }
}

上述类的映射注册如下所示。

// From DO to DTO:
configuration.CreateMap<DO, DTO>()
   .ForMember(d => d.MappedProperty1, o => o.MapFrom(s => s.Property1))
   .ForMember(d => d.MappedProperty2, o => o.MapFrom(s => s.Property1 + s.Property2));

// From DTO to DO:
configuration.CreateMap<DTO, DO>()
   .ForMember(d => d.Property1, o => o.MapFrom(s => s.MappedProperty1))
   .ForMember(d => d.Property2, o => o.MapFrom(s => s.MappedProperty1 - s.MappedProperty2));

在代码的其他地方,我需要在映射中获取目标属性名称。我目前正在这样做:

var map= mapper.ConfigurationProvider.FindTypeMapFor<DTO, DO>();
var property = map.GetPropertyMaps().First(f => f.SourceMember == typeof(DTO).GetProperty("MappedProperty1"));
var name = property.DestinationProperty.Name;

这适用于MappedProperty1. 但是,它不起作用,MappedProperty2因为有两个属性参与映射。相反,我收到错误消息:

“序列不包含匹配元素”。

我还尝试了以下而不是First过滤器,在调试中我可以看到列表中的计数为零。

var map= mapper.ConfigurationProvider.FindTypeMapFor<DTO, DO>();
var property = map.GetPropertyMaps().Where(w => w.SourceMember == typeof(DTO).GetProperty("MappedProperty2")).ToList();

如何为多属性映射实现此源名称解析?

标签: c#automapper.net-core-2.1

解决方案


推荐阅读