Жесткая загрузка в Entity Framework не удается на сложном запросе - PullRequest
1 голос
/ 17 сентября 2009

При выполнении следующего запроса не удается загрузить таблицы:

IEnumerable<Bookmark> tempBookmarks = ListBookmarksByUserID(userID);
IEnumerable<CandidateWithBookmarks> results = (from c in _internshipEntities.CandidateSet
                                            .Include("education")
                                            .Include("progress")
                                            .Include("contacts")
                                            .Include("availability")
                                            .Include("hosttypes")
                                            .Include("hostsizes")
                                            .Include("hostcapacities")
                                            .Include("hoststates")
                                            .Include("users")
                       join b in tempBookmarks on c.ID equals b.candidates.ID
                       select new CandidateWithBookmarks()
                                  {CandidateObject = c, BookmarkObject = b});
return results;

Я нашел несколько статей, связанных с этой проблемой, а именно: Статья Алекса Джеймса «Как сделать так, чтобы действительно включалось» . Решение поставляется с одним предупреждением:

Чтобы это работало, ваш окончательный выбор должен быть сущностями, т. Е. Выбирать запись, а не выбирать новую {…}

Что, очевидно, является проблемой для вышеуказанного блока кода. Существуют ли другие известные способы решения этой проблемы, которые не прервут энергичную загрузку?

1 Ответ

2 голосов
/ 17 сентября 2009

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

IEnumerable<CandidateWithBookmarks> results = (
    from b in tempBookmarks
    join c in _internshipEntities.CandidateSet
                                 .Include("education")
                                 .Include("progress")
                                 .Include("contacts")
                                 .Include("availability")
                                 .Include("hosttypes")
                                 .Include("hostsizes")
                                 .Include("hostcapacities")
                                 .Include("hoststates")
                                 .Include("users")
    on b.candidates.ID equals c.ID
    select new CandidateWithBookmarks(){CandidateObject = c, BookmarkObject = b});

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

...