Nano Hash - криптовалюты, майнинг, программирование

Сообщите AutoMapper, что поле является членом верхнего уровня

Я пытаюсь облегчить создание выражений сопоставления в AutoMapper, используя AutoMapper.QueryableExtensions.

У меня есть следующее, что дает критический прирост производительности:

    private MapperConfiguration CreateConfiguration() {
        return new MapperConfiguration(cfg => cfg.CreateMap<Widget, WidgetNameDto>()
        .ForMember(dto => dto.Name,
            conf => conf.MapFrom(w => w.Name)));
    }

Чтобы понять прирост производительности, см. здесь: https://github.com/AutoMapper/AutoMapper/blob/master/docs/Queryable-Extensions.md Суть в том, что запрос ограничен полем на уровне базы данных.

Это потрясающе, что это работает. Но я ожидаю, что мне понадобится много такого рода проектов. Я пытаюсь немного облегчить синтаксис в предложении ForMember выше.

Например, я пробовал это:

    public static IMappingExpression<TFrom, TTo> AddProjection<TFrom, TTo, TField>(this IMappingExpression<TFrom, TTo> expression,
        Func<TFrom, TField> from,
        Func<TTo, TField> to
        )
        => expression.ForMember(t => to(t), conf => conf.MapFrom(f => from(f)));

Проблема в том, что все, что я делаю, приводит к ошибке:

AutoMapper.AutoMapperConfigurationException : Custom configuration for members is only supported for top-level individual members on a type.

Даже если переданные в Funcs отдельные члены высшего уровня, этот факт теряется при передаче, поэтому я натыкаюсь на ошибку. Я также попытался изменить Func‹Whatever> на Expression‹Func‹Whatever>>. Это не помогает.

Можно ли как-то упростить синтаксис предложения ForMember? В идеале я бы просто пропустил два соответствующих поля.


Ответы:


1

Во-первых, нет необходимости добавлять сопоставление для полей/свойств, совпадающих по имени — AutoMapper сопоставляет их автоматически по соглашению (поэтому он называется сопоставление объекта-объекта на основе соглашения). А для включения в прогноз только некоторых свойств вы можете использовать Явное расширение.

Во-вторых, то, что вы называете болью в синтаксисе ForMember, на самом деле является гибкостью. Например, явным расширением и другим поведением можно управлять с помощью аргумента conf, так что это не только для указания источника.

С учетом сказанного, то, что вы просите, возможно. Вы должны изменить тип from/ to на Expression:

 Expression<Func<TFrom, TField>> from,
 Expression<Func<TTo, TField>> to

и реализация просто следующим образом:

=> expression.ForMember(to, conf => conf.MapFrom(from));
26.02.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..