Как разрешить исходный элемент для сопоставления нескольких свойств в AutoMapper? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть классы 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();

Как мне добиться этого разрешения имени источника для сопоставления с несколькими свойствами?

...