Запрос Linq для данных EF 4.1 с вложенными списками, привязанными к форме WPF - PullRequest
1 голос
/ 13 ноября 2011

Исходя из этого предыдущего вопроса:

Запрос Linq для данных EF 4.1 со вложенными списками

WPF требуется ObservableCollection для привязкиданные.Я знаю, что могу создать ObservableCollection, используя список в конструкторе, например:

new ObservableCollection(myListName)

Но будут ли вложенные группы привязываться к форме WPF или мне нужно будет запустить результат моего запроса linq впредопределенный тип с ObservableCollections на каждом уровне?

1 Ответ

1 голос
/ 13 ноября 2011

Вы можете напрямую использовать ObservableCollection<School> и ObservableCollection<Class> вместо IList<School> и IList<Class> в ваших классах моделей. Таким образом вы гарантируете, что Entity Framework материализует коллекцию как ObservableCollection<T>, когда вы используете нетерпеливую или отложенную загрузку. С IList<T> EF создаст List<T> как конкретный тип, а не ObservableCollection<T>.

Если ваши навигационные свойства помечены как virtual, вы используете отложенную загрузку, что означает, что EF автоматически загрузит коллекции, как только ваша форма WPF захочет получить доступ к свойствам. (Контекст не должен быть расположен, чтобы это работало.)

Если вы хотите загрузить все коллекции одновременно в одном запросе, вы можете использовать готовую загрузку:

var students = new ObservableCollection<Student>(
    context.Students.Include(s => s.Schools.Select(sc => sc.Classes)));

Это сообщение в блоге также может быть полезным.

...