如何在AutoMapper中解析用于多属性映射的源成员?

时间:2018-09-26 08:58:39

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

我有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();

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

0 个答案:

没有答案