Я ищу хороший справочник по правильному методу использования Linq to Sql вместе с WPF.Правильный способ использования Linq с WPF
Большинство руководств относятся только к основным принципам, например, как показывать данные из базы данных, но никто из них не нашел, как сохранить обратно в базу данных. Можете ли вы ответить или указать мне руководство, которое может ответить на эти вопросы.
У меня есть отдельный проект Data, потому что те же данные также будут использоваться на веб-странице, поэтому у меня есть метод репозитория. Это означает, что у меня есть отдельный класс, который использует DataContext, и есть такие методы, как GetAllCompanies() и GetCompanyById (int id).
1) Где есть коллекции, лучше всего вернуться в качестве IQueryable или я должен вернуть список?
Внутри проекта WPF я видел рекомендации об обертке коллекции в ObservabgleCollection.
2) Почему я должен использовать ObservableCollection, и я должен использовать его даже с Linq/IQueryable
Некоторые свойства Linq лиц должны быть доступны для редактирования в приложении, так что я поставил их в режим двунаправленной. Это изменит объект в наблюдаемом наборе.
3) Является ли объект в ObservableCollection еще экземпляр исходного LinQ объекта и так это изменение отражается в базе данных (если SubmitChanges называется)
я должен somekind из метода сохранения в хранилище. Но когда мне это называть? Что произойдет, если кто-то редактирует поле, но решает не сохранять его, переходит к другому объекту и редактирует его, а затем нажмите «Сохранить». Не сохраняет ли исходное изменение? Когда он больше не запоминает изменения объекта объекта linq. Должен ли я экземпляр класса Datacontext в каждом методе, поэтому он теряет область действия.
4) Когда и как вызвать метод SubmitChanges
5) Должен ли я иметь DataContext в качестве переменной-члена класса репозитория или переменной метода
Чтобы добавить новую строку, я должен создать новый объект в событии («новое» нажатие кнопки), а затем добавьте его в базу данных с помощью метода репо.
6) Когда я добавляю объект в базу данных, в ObservableCollection не будет нового объекта. Я как-то обновляюсь.
7) Я не буду повторно использовать окно редактирования при создании нового, но не уверен, как динамически менять ссылку на выделенный элемент из списка на этот новый объект. Любые примеры, которые вы можете указать.
Итак, я должен создавать классы ViewModel для каждой таблицы в базе данных? Затем, когда он изменился, мне нужно снова получить исходный объект, изменить его, чтобы он соответствовал viewModel, а затем сохранил его. Это много кода и, похоже, отрицает многие из хороших качеств привязки linq и WPF. –
Правильно. Но чтобы сохранить некоторое кодирование, вы можете использовать объекты LINQ в качестве бизнес-объектов, но как только вы закроете DataContext (который должен быть закрыт как ASAP), они не смогут распространять изменения обратно в базу данных. Вам нужно будет выбрать новый объект из нового DataContext, скопировать все свойства из старого в новый и вызвать SubmitChanges(). Вы также можете ознакомиться со следующими ссылками: http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx http://www.plinqo.com/ И http: //www.plinqo.com/entity-enhancements.ashx – decyclone
Хорошо подумайте о создании классов ViewModel для каждой сущности/db-таблицы. Этот класс ViewModel может обрабатывать сохранение объекта обратно в db, например. Если я позволю этим классам реализовать INotifyPropChange, мне не нужно помещать его в ObservableCollection. Также я их не наследую от какого-то базового класса. Является ли это шаблоном дизайна, который обычно используется, и есть ли где-нибудь, что я могу прочитать об этом? –