Какова лучшая практика для нескольких «Включить» в Entity Framework?

Позволять'скажем, у нас есть четыре объекта в модели данных: категории, книги, авторы и книги. Также предположим, что отношения «Категории-Книги», «Книги-Авторы» и «Книги-Книги-Страницы» являются взаимно-однозначными.

Если экземпляр сущности категории извлекается из базы данных, включаяКниги ","Books.BookPages» а также "Books.Authors» - это станет серьезной проблемой производительности. Более того, не включая их приведет кСсылка на объект не установлена на экземпляр объекта " исключение.

Как лучше всего использовать несколько вызовов метода Include?

Напишите один метод GetCategoryById и включите в него все элементы (проблема производительности)Напишите единственный метод GetCategoryById и отправьте список отношений для включения (возможно, но все еще кажется недостаточно элегантным)Написать методы, такие как GetCategoryByIdWithBooks, GetCategoryByIdWithBooksAndBooksPages и GetCategoryByIdWithBooksAndAuthors (не практично)

РЕДАКТИРОВАТЬВторой вариант я имел в виду примерно так:

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

При звонке нам нужен такой код:

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

Есть ли явные недостатки этого подхода?

Ответы на вопрос(4)

Ваш ответ на вопрос