Как включить все дочерние объекты при запросе контекста с помощью выражения Where с использованием Entity Framework 4.1? - PullRequest
0 голосов
/ 28 июня 2011

Я создал общий репозиторий, который обрабатывает запросы моих сущностей.

Когда я вызываю это:

public IQueryable<TEntity> GetQuery()
        {
           return _context.Set<TEntity>().AsQueryable();
        }

Я возвращаю всю сущность, включая все дочерние сущности.

Когда я вызываю это:

public TEntity GetById(Guid id)
        {
            return GetQuery().Where(e => e.Id == id).FirstOrDefault();
        }

Я должен указать, какие дочерние сущности включить.

Есть ли способ вернуть ВСЕ дочерние сущности без необходимости писать включения для каждой сущности?

1 Ответ

2 голосов
/ 28 июня 2011

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

foreach (var parent in repo.GetQuery()) {
    foreach (var child in parent.Children) {
        // do something
    }
}

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

Обновление:

Не совсем уверен, почему вы дали мой ответ -1, но в качестве дальнейшего разъяснения.

Вы указали относительно метода GetQuery ():

Я верну всю сущность, включая все дочерние объекты.

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

Один запрос должен работать, с отложенной загрузкой.

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

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