Есть ли способ автоматически загрузить навигационное свойство с помощью .NET Entity Framework? - PullRequest
2 голосов
/ 15 мая 2010

Отходя все больше и больше от написания SQL для моих приложений, я решил попробовать Entity Framework. Однако я столкнулся с чем-то, что, по моему мнению, заставляет меня писать больше кода, чем я считаю строго необходимым.

Когда я получил доступ к некоторым навигационным свойствам, я обнаружил, что все отношения «многие к одному» (простые ссылки) были нулевыми, а все отношения «один ко многим» и «многие ко многим» (EntityCollections) были пустыми.

Например: у меня есть пользователь со ссылкой на группу. Когда я выбрал пользователя с помощью простого выбора по идентификатору, свойство Group имеет значение null. Если я хочу получить доступ к группе, я должен загрузить ее вручную (используя User.GroupReference.Load ()). Поэтому я добавил метод GetGroup () в User, который проверяет, загружена ли уже группа, и, если нет, делает, а затем возвращает группу.

Теперь это приведет к множеству очень похожих методов для всех навигационных свойств. И все это приводит к тому, что навигационные свойства не используются, теперь используются только мои собственные методы Get "PropertyName" ().

Я не хочу расширять свои запросы (linq to entity) для немедленной загрузки всех этих свойств, потому что сначала не всегда известно, что нужно. И кроме того, это вызовет множество запросов.

Есть ли способ настроить Entity Framework для загрузки этих объектов, когда они отсутствуют? Поэтому, когда я получаю доступ к User.Group и группа еще не загружена, она загружается автоматически? Или я застрял, используя собственный метод Get "PropertyName" (), если я пытаюсь загружать объекты только по требованию (или "точно в срок")?

Дополнительная информация: я использую VS2008 SP1 с .NET 3.5 SP1. Entity Framework, который я использую, поставляется с ним.

1 Ответ

1 голос
/ 15 мая 2010

Вы можете получить EFLazyLoading - это добавит прозрачную поддержку отложенной загрузки в Entity Framework, заменив генератор кода.

В Entity Framework 1.0 нет встроенной поддержки прозрачной отложенной загрузки - только активная загрузка с использованием Include() и ручная отложенная загрузка с использованием Load(). Я не уверен насчет Entity Framework 2.0, но если нет встроенной поддержки, ее, по крайней мере, проще добавить, чем раньше, из-за использования T4 для генерации кода.

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