Qual é a prática recomendada para vários "Incluir" -s no Entity Framework?

Digamos que temos quatro entidades no modelo de dados: Categorias, Livros, Autores e BookPages. Assuma também que os relacionamentos Categorias-Livros, Livros-Autores e Livros-BookPages são um-para-muitos.

Se uma instância de entidade de categoria for recuperada do banco de dados, incluindo "Books", "Books.BookPages" e "Books.Authors", isso se tornará um sério problema de desempenho. Além disso, não incluí-los resultará na exceção "Referência de objeto não está definida para uma instância de um objeto".

Qual é a melhor prática para usar várias chamadas de método Include?

Escreva um único método GetCategoryById e inclua todos os itens dentro (problema de desempenho)Escreva um único método GetCategoryById e envie uma lista de relacionamentos para incluir (talvez, mas ainda não pareça elegante o suficiente)Escrever métodos como GetCategoryByIdWithBooks, GetCategoryByIdWithBooksAndBooksPages e GetCategoryByIdWithBooksAndAuthors (não prático)

EDITAR: Por segunda opção eu quis dizer algo assim:

public static Category GetCategoryById(ModelEntities db, int categoryId, params string[] includeFields)
{
    var categories = db.Categories;

    foreach (string includeField in includeFields)
    {
        categories = categories.Include(includeField);
    }

    return categories.SingleOrDefault(i => i.CategoryId == categoryId);
}

Ao ligar, precisamos de um código como este:

Category theCategory1 = CategoryHelper.GetCategoryById(db, 5, "Books");
Category theCategory2 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages");
Category theCategory3 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Authors");
Category theCategory4 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages", "Books.Authors");

Existem algumas desvantagens distintas desta abordagem?

questionAnswers(4)

yourAnswerToTheQuestion