AutoMapper имеет проблему с отображением словаря, созданного методом LINQ - PullRequest
0 голосов
/ 03 апреля 2020

Хорошо, у меня есть заданный код для одного из членов класса назначения (точнее, член NameTranslations - это словарь из двух строк):

.ForMember(
    destination => destination.NameTranslations,
    options => options.MapFrom(source =>
        source.NameTranslation
            .TranslationsValues
            .ToDictionary(vtv => vtv.Language.Code, vtv => vtv.Value))

В этой форме AutoMapper не может отобразить словарь, созданный Метод LINQ ToDictionary (...), поскольку он выдает следующую ошибку:

При вызове из «VisitLambda» перезапись узла типа «System.Linq.Expressions.ParameterExpression» должна возвращать не -нулевое значение того же типа. Также можно переопределить «VisitLambda» и изменить его, чтобы не посещать дочерние элементы этого типа.

Я попытался сопоставить коллекцию со словарем, добавив дополнительную конфигурацию сопоставления следующим образом:

CreateMap<TranslationsValues, KeyValuePair<string, string>>().ConstructUsing(
    source => new KeyValuePair<string, string>(source.Language.Code, source.Value)
);

и удаление вызова метода ToDictionary

.ForMember(
    destination => destination.NameTranslations,
    options => options.MapFrom(source =>
        source.NameTranslation
            .TranslationsValues)

но затем я получил сообщение об ошибке:

Типы аргументов не совпадают

Интересная вещь заключается в том, что когда я пытался создать словарь с помощью метода stati c в классе, в котором находятся эти конфигурации, он был бы правильно сопоставлен, но свойство навигации Language из моделей EntityFramework Core 3.1 не было загружено (это должно быть потому, что перед методом ProjectTo в репозитории я вызываю функцию «Включить для этого свойства навигации»), так что это было бесполезно для меня.

Я действительно не знаю, что я мог сделать больше. У кого-нибудь есть идея, что не так с этим отображением? Все остальные участники правильно отображаются без проблем.

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