Automapper - IncludeBase abstract generi c родительская причина "... не получена из" ошибки - PullRequest
0 голосов
/ 09 мая 2020

У меня есть 3 объекта: QuestionA, QuestionB, QuestionC, которые все являются производными от абстрактного BaseQuestion.

Затем у меня есть AnswerA, который наследует BaseAnswer<QuestionA>, AnswerB который выводит BaseAnswer<QuestionB>, AnswerC, который выводит BaseAnswer<QuestionC>,

Мне нужно сопоставить AnswerA с AnswerDTO (то же, что и B и C).

Итак, я написал этот код:

CreateMap<BaseAnswer<BaseQuestion>, AnswerDTO>()
    .ForMember(
        dto => dto.UserDisplay,
        o => o.MapFrom(x => $"{x.User.FirstName} {x.User.LastName}"));

CreateMap<AnswerB, AnswerDTO>()
    .IncludeBase<BaseAnswer<BaseQuestion>, AnswerDTO>();

Но это вызывает эту ошибку:

AnswerB is not derived from BaseAnswer`1[BaseQuestion]. (Parameter 'derivedType')

Я попытался изменить его вот так

CreateMap<AnswerB, AnswerDTO>()
    .IncludeBase<BaseAnswer<QuestionB>, AnswerDTO>();

и добавить:

CreateMap<BaseAnswer<QuestionB>, AnswerDTO>()
    .IncludeBase<BaseAnswer<BaseQuestion>, AnswerDTO>();

Но я вызываю аналогичную ошибку.

Я мог бы написать это так, и он работает, но это избыточно:

CreateMap<BaseAnswer<QuestionA>, AnswerDTO>()
    .ForMember(
        dto => dto.UserDisplay,
        o => o.MapFrom(x => $"{x.User.FirstName} {x.User.LastName}"));

CreateMap<BaseAnswer<QuestionB>, AnswerDTO>()
    .ForMember(
        dto => dto.UserDisplay,
        o => o.MapFrom(x => $"{x.User.FirstName} {x.User.LastName}"));

CreateMap<BaseAnswer<QuestionC>, AnswerDTO>()
    .ForMember(
        dto => dto.UserDisplay,
        o => o.MapFrom(x => $"{x.User.FirstName} {x.User.LastName}"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...