Как кэшировать лениво загруженное свойство - PullRequest
0 голосов
/ 29 марта 2011

Справочная информация:

У меня есть две таблицы master и detail. каждая строка в detail содержит свойство master (отложенная загрузка).

Я хочу кэшировать коллекцию detail с их мастерами в коллекции, как показано ниже:

List<Detail> cachedItems = entities.Details.ToList();

foreach (var d in cachedItems)
    d.master // throws exception 

Экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения.

Вопрос:

Как я могу кэшировать объект master с помощью объекта detail, не используя другую коллекцию, и я предпочитаю получать их в один прием.

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Вы можете попробовать использовать функцию Включить для формирования результатов вашего запроса.

1 голос
/ 29 марта 2011

Вы должны явно получить мастер-записи, прежде чем закрыть ObjectContext. Если ваше свойство навигации в объекте Detail называется Master, измените запрос поиска данных на:

List<Detail> cachedItems = entities.Details.Include("Master").ToList();

или в случае использования Include метод расширения формы EF 4.1

List<Detail> cachedItems = entities.Details.Include(d => d.Master).ToList();

Это сразу загрузит детали с их хозяевами в одну поездку.

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