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

EF Core — включение связанных объектов с помощью универсального метода

ранее, еще во времена EF Frameowrk, следующий метод был достаточен, когда требовались связанные сущности с сущностью.

private IQueryable<T> EntitySet(params Expression<Func<T, object>>[] includes)
    {
        var set = Context.Set<T>().Where(x => !x.IsDeleted);
        if (includes != null)
        {
            foreach (var include in includes)
            {
                set = set.Include(include);
            }                
        }
        return set;
    }

Я бы назвал этот метод чем-то вроде EntitySet(x => x.People, x => x.People.Meetings). Однако с тех пор, как я перешел на ядро ​​EF, я больше не могу получать соответствующие данные, потому что мне нужно явно использовать Include(x.People).ThenInclude(p.Meegings).

Возможно ли то, что я пытаюсь сделать, в ядре EF? Или было так много изменений в сборе связанных данных, что описанный выше метод больше не применим?


Ответы:


1

Похоже, вы пытаетесь добавить фильтр ко многим запросам одного и того же DbSet. Вы когда-нибудь рассматривали фильтры запросов в EF Core? Это очень похоже на то, что вы пытаетесь сделать. Если вам нужно, чтобы запрос получал все записи, а не только активные записи, есть возможность игнорировать фильтры запросов по каждому запросу.

https://docs.microsoft.com/en-us/ef/core/querying/filters

Изменить: если вы хотите динамически указать свои включения. Вы можете сделать это со строками в EF Core так же, как это было сделано в EF. Однако возможность использования лямбда-выражения для доступа к дочерним объектам могла быть потеряна при преобразовании. https://entityframeworkcore.com/knowledge-base/38083198/add-include-expressions-dynamically

01.06.2020
  • К сожалению, на самом деле это не одно и то же. QF может использоваться в судебном запрете с Include. Вы должны использовать фильтры запросов, если хотите сказать «исключить все удаленные записи с тегами». 01.06.2020
  • Возможность использования лямбды не потеряна. Это довольно много упоминается в посте. 01.06.2020
  • @GuruStron Пожалуйста, приведите пример того, как сделать лямбда-включение для дочернего объекта. Али заявил о намерении не делать Include(‹›).ThenInclude(‹›). Единственной альтернативой в EFCore является строка Include(Parent.Child). 01.06.2020
  • Вы по-прежнему можете получить доступ к детям с помощью лямбда. Как вы сказали - с ThenInclude. 01.06.2020
  • @GuruStron OP запросил альтернативы ThenInclude, чтобы позволить указанным дочерним элементам оставаться динамическими. 01.06.2020
  • Да, возможность использования лямбда-выражений не потеряна, она была переработана. Да, его нельзя использовать в данном случае, но опять же он не теряется. 01.06.2020
  • @GuruStron Это не рефакторинг. Решение EF позволяло использовать строковые входные данные, а также логику EF Core. Возможность EF использовать лямбда-выражения для доступа к дочерним объектам не была преобразована в использование строк, поскольку строки уже использовались. 01.06.2020
  • Новые материалы

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

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

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

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

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

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

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