Какова лучшая практика для нескольких «Включить» в 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");
Есть ли явные недостатки этого подхода?