[EF4] LoadProperty вместе с Include
От: vers  
Дата: 08.11.10 09:49
Оценка:
Имеются две сущности, скажем, библиотеки (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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.