Jaka jest najlepsza praktyka dla wielu „Uwzględnij” w Entity Framework?

Powiedzmy, że mamy cztery elementy w modelu danych: kategorie, książki, autorzy i strony książek. Załóżmy również, że relacje między kategoriami - książki, autorzy książek i książki-książki są jedno-do-wielu.

Jeśli instancja kategorii jest pobierana z bazy danych - w tym „Książki”, „Books.BookPages” i „Books.Authors” - będzie to poważny problem z wydajnością. Co więcej, nieuwzględnienie ich spowoduje wyjątek „Odwołanie do obiektu nie jest instancją obiektu”.

Jaka jest najlepsza praktyka korzystania z wielu wywołań metod Include?

Napisz pojedynczą metodę GetCategoryById i uwzględnij wszystkie elementy wewnątrz (problem z wydajnością)Napisz jedną metodę GetCategoryById i wyślij listę relacji do dołączenia (być może, ale wciąż wydaje się niewystarczająco elegancka)Napisz metody takie jak GetCategoryByIdWithBooks, GetCategoryByIdWithBooksAndBooksPages i GetCategoryByIdWithBooksAndAuthors (niepraktyczne)

EDYTOWAĆ: W drugiej opcji miałem na myśli coś takiego:

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);
}

Podczas dzwonienia potrzebujemy takiego kodu:

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");

Czy są jakieś wyraźne wady tego podejścia?

questionAnswers(4)

yourAnswerToTheQuestion