Was ist die empfohlene Vorgehensweise für mehrere "Include" -Einträge in Entity Framework?

Angenommen, das Datenmodell enthält vier Entitäten: Kategorien, Bücher, Autoren und BookPages. Nehmen Sie auch an, dass die Beziehungen Kategorien-Bücher, Bücher-Autoren und Bücher-Buchseiten eins zu viele sind.

Wenn eine Kategorieentitätsinstanz aus einer Datenbank abgerufen wird - einschließlich "Books", "Books.BookPages" und "Books.Authors" - wird dies zu einem schwerwiegenden Leistungsproblem. Darüber hinaus führt das Nichteinschließen zu der Ausnahme "Objektreferenz ist nicht auf eine Instanz eines Objekts festgelegt".

Was ist die beste Vorgehensweise für die Verwendung mehrerer Include-Methodenaufrufe?

Schreiben Sie eine einzelne Methode GetCategoryById und schließen Sie alle Elemente ein (Leistungsproblem).Schreiben Sie eine einzelne Methode GetCategoryById und senden Sie eine Liste der Beziehungen, die einbezogen werden sollen (vielleicht, aber immer noch nicht elegant genug).Schreibe Methoden wie GetCategoryByIdWithBooks, GetCategoryByIdWithBooksAndBooksPages und GetCategoryByIdWithBooksAndAuthors (nicht praktisch)

BEARBEITEN: Mit der zweiten Option habe ich Folgendes gemeint:

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

Wenn wir anrufen, brauchen wir einen Code wie diesen:

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

Gibt es bestimmte Nachteile dieses Ansatzes?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage