Имеются две сущности, скажем, библиотеки (Libraries) и содержащиеся в них книги (Books). Отношения между библиотеками и книгами — 1:*. У библиотек и книг есть несколько связей *:1 с другими таблицами, например, для библиотек это город (City), а для книг — жанр (Genre). Все сущности реализованы в виде POCO при помощи ADO.NET EF POCO Generator.
Задача: загрузить список библиотек вместе с городами, в которых они находятся, затем для каждой библиотеки загрузить список книг вместе с их жанрами. Результат вернуть в виде списка библиотек. Я нашел вот такое неоптимальное решение:
using (DataModelContainer container = CreateContainer())
{
List<Library> libraries = container.Libraries.Include("City").ToList();
foreach (Library library in libraries)
{
container.LoadProperty(library, libraryItem => libraryItem.Books);
foreach (Book book in library.Books)
container.LoadProperty(book, bookItem => bookItem.Genre);
}
return libraries;
}
Неоптимальное оно потому, что выполняется дополнительная операция LoadPropery для загрузки жанра книги, то есть еще один SELECT, когда можно было получить эти данные при помощи JOIN в первой операции LoadProperty.
Вопрос: как загрузить список книг и их жанров в одном запросе к БД и присоединить результат к свойству Books объекта Library?