Вы можете напрямую использовать 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)));
Это сообщение в блоге также может быть полезным.