Linq to Entities - бесконечный цикл объектов - PullRequest
0 голосов
/ 11 июля 2011

В данный момент я работаю над очень большой моделью базы данных для одного из моих сайтов. Я использую Linq-to-entity для общения с базой данных. Теперь, когда я получаю объект из моего контекста, я вижу эту проблему:

  • Субъект "BookReader" получил список всех книг, которые он прочитал. Но сущность «Книга» также получила список со всеми читателями, которые прочитали книгу. Теперь это будет означать, что всякий раз, когда мой datacontext возвращает объект чтения книг в режиме отладки, и я просматриваю список книг, которые он прочитал, я также вижу всех читателей там и книги, которые они читают. и т. д.

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

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Я так не думаю. EF никогда не загружает связанные объекты, пока вы или ваш код не дадите ему указаний сделать это. Вы упомянули, что видите это в отладчике. Это означает, что вы инициировали ленивую загрузку связанной сущности, открыв коллекцию, связанную с родительской сущностью, пустую, пока вы не попытаетесь получить к ней доступ в первый раз, а просмотр сущности в отладчике считается доступом. Вы можете проверить это в профилировщике SQL.

0 голосов
/ 11 июля 2011

Линк-к-чему-либо никогда не разрешает свои запросы, пока они не должны.

Если вы посмотрите на переменные в отладчике, вы увидите «Нажмите, чтобы развернуть» в любой из дочерних коллекций.Только когда вы нажимаете на них, запросы к базе данных будут фактически выполняться.

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

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