Скажем, у нас есть четыре объекта в модели данных: категории, книги, авторы и книжные страницы. Также предположим, что отношения "Книги-Книги", "Книги-Авторы" и "Книги-Книжные страницы" являются "один ко многим".
Если экземпляр сущности категории извлекается из базы данных, включая "Книги", "Книжные книги" и "Books.Authors" - это станет серьезной проблемой производительности. Более того, не включая их приведет к тому, что исключение "Ссылка на объект не задано на экземпляр объекта".
Какова наилучшая практика для использования нескольких вызовов метода Include?
- Напишите один метод GetCategoryById и включите все элементы внутри (проблема с производительностью)
- Напишите один метод GetCategoryById и отправьте список отношений для включения (возможно, но все еще кажется недостаточно элегантным).
- Напиши такие методы, как GetCategoryByIdWithBooks, GetCategoryByIdWithBooksAndBooksPages и GetCategoryByIdWithBooksAndAuthors (не практично).
EDIT: по второму варианту я имел в виду примерно следующее:
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");
Существуют ли какие-либо отличительные признаки этого подхода?