"MemberList.Source" не выдает исключение, когда это должно - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующие модели:

public class A
{
    public int a1;
    public int a2;
    public int a3;
    public int a4;
    public B b;
}

public class B
{
    public int b1;
    public int b2;
    public C c;
}

public class C
{
    public int c1;
    public int c2;
}

public class A_DTO
{
    public int a1;
    public int a2;
    public int a3;
    public B_DTO b;
}


public class B_DTO
{
    public int b1x;
    public int b2;
    public C_DTO c;
}

public class C_DTO
{
    public int c1;
}

И вот мои цели:

  1. Сопоставить каждого члена в источнике с участником в пункте назначения с тем же именем (включая наследование))
  2. Создать пользовательскую карту для Abb1 -> A_DTO.b.b1x
  3. Явно указать, что для Abcc2
  4. нет сопоставления, если в источнике есть несопоставленное свойство, котороеявно не отображается и не может быть отображено на основе того же имени, выбросить исключение

А вот конфигурация, которую я использую для этого:

        var config = new MapperConfiguration(
            cfg => {
                cfg.CreateMap<A, A_DTO>(MemberList.Source);
                cfg.CreateMap<B, B_DTO>(MemberList.Source)
                .ForMember(dest => dest.b1x, opt => opt.MapFrom(src => src.b1));
                cfg.CreateMap<C, C_DTO>(MemberList.Source)
                .ForSourceMember(src => src.c2, opt => opt.DoNotValidate());
            }
        );

А вот тестовые данныеЯ использовал:

        var mapper = config.CreateMapper();
        A a = new A()
        {
            a1 = 1,
            a2 = 2,
            a3 = 3,
            a4 = 10,
            b = new B
            {
                b1 = 4,
                b2 = 5,
                c = new C
                {
                    c1 = 6,
                    c2 = 7
                }
            }
        };

        A_DTO aDto = new A_DTO();

        mapper.Map(a, aDto);

Это соответствует всем перечисленным выше условиям, кроме последнего, потому что a4 не существует на A_DTO, и я все еще не получаю исключение.(Принимая во внимание, что, если я удаляю .ForSourceMember(src => src.c2, opt => opt.DoNotValidate()), он выдает исключение для c2.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...