AutoMapper: указанный c элемент отображается, даже если настроено «Игнорировать» - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь игнорировать специфицированный c член для сопоставления, конфигурация приведена ниже:

  public class Source1
  {
    public int Id { get; set; }
  }
  public class Source2
  {
    public int Id { get; set; }
  }
  public class ComplexSource
  {
      public Source1 Source1 { get; set; }
      public Source2 Source2 { get; set; }
  }
  public class Dest
  {
     public int Source1Id { get; set; }
     public int Source2Id { get; set; }
  }

public class TestProfile : Profile
{
    public TestProfile()
    {
      cfg.CreateMap<Source1, Dest>()
      .ForMember(dest => dest.Source1Id, opt => opt.Ignore());
      cfg.CreateMap<Source2, Dest>();
      cfg.CreateMap<ComplexSource, Dest>()
      .IncludeMembers(src => src.Source1, src => src.Source2);
    }
 }
  var complexSource = new ComplexSource()
  {
    Source1 = new Source1()
    {
      Id = 1,
    },
    Source2 = new Source2()
    {
       Id = 1,
    }
  };
  var dest = mapper.Map<ComplexSource, Dest>(complexSource); 
  Console.WriteLine(dest.Source1Id == 1) // true

Я думаю, это происходит потому, что соглашение о сопоставлении имеет более высокий приоритет, чем конфигурация сопоставления.

По какой-то причине я не буду переименовывать свойство ComplexSouce , чтобы избавиться от соглашения о сопоставлении, в такой ситуации, как я могу игнорировать указанный c член для сопоставления когда соглашение соблюдается?

...