Какова лучшая практика для нескольких «Включить» в Entity Framework?
Допустим, у нас есть четыре объекта в модели данных: категории, книги, авторы и страницы книг. Также предположим, что отношения «Категории-Книги», «Книги-Авторы» и «Книги-Книги-Страницы» являются взаимно-однозначными.
Если экземпляр сущности категории извлекается из базы данных, включая «Книги», «Книги.Книги» и «Книги. Авторы», это станет серьезной проблемой производительности. Более того, их отсутствие приведет к исключению «Ссылка на объект не установлена на экземпляр объекта».
Как лучше всего использовать несколько вызовов метода 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");
Есть ли явные недостатки этого подхода?