Вопрос

У меня есть элемент, связанный с объектом (контактом), который предоставляет некоторые свойства навигации.

Я хочу, чтобы при выполнении какого-либо действия (например, кнопки «Загрузить дочерние элементы») контакт должен был загружаться для всех своих дочерних элементов и внуков, как я могу сделать с помощью ObjectQuery.Include перед выполнением; пример (псевдо):

DirectCast(element.DataContext, Contact).SubContacts. _
   Include("Address.State"). _
   Load()

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

Я думаю, что это должно было быть частью Entity-Framework.

Это было полезно?

Решение

Я не уверен, что следую за вопросом, но позвольте мне проверить:

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

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

У каждой ссылки в Entity Framework есть метод, который называется CreateSourceQuery . Он возвращает объектный запрос, так что вы можете использовать его для этого (извините, C #):

AlreadyLoadedContact.SubContacts.CreateSourceQuery().Include("Address.State").ToList();

Вызов ToList выполняет запрос, и Entity Framework возьмет все результаты и автоматически добавит их к вам SubContacts EntityCollection.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top