Хобрук: Ваш путь к мастерству в программировании

Почему сущности нетерпеливо загружены?

У меня есть иерархия сущностей с несколькими слоями, один из которых содержит объекты, число которых может исчисляться десятками тысяч. Бывают случаи, когда мне нужен только объект верхнего уровня, но я обнаруживаю, что Entity Framework загружает все в иерархии.

Я даже пробовал явную ленивую загрузку, но безрезультатно.

using (var db = new MyEntities())
{
    db.Configuration.ProxyCreationEnabled = true;
    db.Configuration.LazyLoadingEnabled = true;

    var daoDict = (from d in db.stt_dictionary
                   where d.id == dictionaryID && !d.deleted
                   select d).FirstOrDefault();
}

Во время отладки, если я пройду через это, а затем наведу указатель мыши на daoDict, я обнаружу, что его свойства коллекции (которые равны virtual) содержат тысячи объектов.

Почему?


Ответы:


1

Извлечение их с помощью отладчика приведет к их загрузке. Отладчик ничем не отличается от обычного кода. Он вызывает метод получения свойства и извлекает данные.

Зарегистрируйте запросы к базе данных, которые фактически выполняются (либо через контекст, либо через базу данных), чтобы увидеть, какие данные извлекаются, когда таким образом, который на самом деле не меняет, какие запросы выполняются.

17.03.2015
  • Я уже рассмотрел причину отладчика. Что я сделал, так это добавил ведение журнала и зарегистрировал количество одной из коллекций, которая, как я ожидал, будет null, но это не так. Или акт вызова .Count извлекает данные? 17.03.2015
  • @awj Как я уже сказал, при получении свойства извлекаются данные. Вот и вся предпосылка ленивой загрузки. Если вы хотите, чтобы при вызове метода получения свойства возникала ошибка, тогда отключите ленивую загрузку, и он вызовет исключение при вызове метода получения незагруженного свойства. 17.03.2015
  • Ага, да - теперь я вижу это в запросе. Спасибо за вашу помощь. 17.03.2015
  • Новые материалы

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

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