Я занимаюсь разработкой приложения, которое использует Entity Framework и WPF с шаблоном проектирования MVVM. У меня есть несколько сущностей, но для простоты, давайте работать только с их подмножеством. Компании, которые могут содержать контакты, адреса и номера телефонов; вышеупомянутые контакты, содержащие адреса, номера телефонов и отправления.
Первоначально я загружал эти объекты из базы данных и оставлял DataContext открытым для последующего использования. Это создает проблемы с точки зрения параллелизма, поскольку любой из обновленных объектов может быть неправильно представлен в других частях программы, поскольку эти части не были обновлены.
Я пробую что-то новое. В моей MainViewModel (к которой можно легко получить доступ из любого другого ViewModel) у меня есть несколько ObservableCollections (моя общая коллекция выбора при работе с объектами WPF Databound), которые я намерен временно сохранить мои сущности. Также есть несколько методов, которые позаботятся о добавлении сущностей в контекст, присоединении, отсоединении, сохранении изменений и т. Д. В моей коллекции записей, отображающей ViewModels (например, CompaniesViewModel), у меня есть фоновый работник, загружающий сущности, отсоединяющий их и сохраняющий их в коллекциях в MainViewModel. К сожалению, мне, очевидно, приходится создавать явные запросы, такие как:
Dim results = From Comp As Company In RVShipContext.Companies _
.Include("Contacts.PhoneNumbers") _
.Include("Addresses") _
.Include("PhoneNumbers") Select Comp
Имейте в виду, это не такая большая проблема, за исключением случаев, когда приходит время загрузить контакт, и теперь мне нужно вернуться (присоединить, запросить, отсоединить), чтобы получить адреса и отправления. Теперь у меня нет реальной проблемы с этим, но некоторые из этих графиков будут иметь несколько уровней глубины. Shimpent содержит один или несколько пакетов. Один или несколько наборов дисков содержат несколько дисков.
Есть ли способ легко загружать большие графики при использовании отдельных сущностей?
Есть ли способ эффективно использовать LazyLoading при использовании отдельных сущностей?
Является ли хорошей идеей держать мои сущности в центральном наборе коллекций (доступном для других частей программы), или мне следует отказаться от него, прежде чем я потрачу слишком много времени на настройку инфраструктуры для него?
Любая помощь будет принята с благодарностью!