Правильный способ использования Linq с WPF - PullRequest
4 голосов
/ 15 июня 2010

Я ищу хорошее руководство по правильному методу использования Linq to Sql вместе с WPF.

В большинстве руководств рассматриваются только базовые основы, например, как показывать данные из базы данных, но я не нашел ни одного, который мог бы вернуться к этой базе данных. Можете ли вы ответить или указать мне руководство, которое может ответить на эти вопросы.

У меня есть отдельный проект Data, потому что те же данные также будут использоваться на веб-странице, поэтому у меня есть метод репозитория. Это означает, что у меня есть отдельный класс, который использует DataContext, и есть такие методы, как GetAllCompanies () и GetCompanyById (int id).

1) Где есть коллекции, лучше ли возвращать как IQueryable, или я должен вернуть список?

В проекте WPF я видел рекомендации обернуть коллекцию в коллекцию ObservabgleCollection.

2) Почему я должен использовать ObservableCollection и должен ли я использовать его даже с Linq / IQueryable

Некоторые свойства объектов linq должны быть доступны для редактирования в приложении, поэтому я установил их в двусторонний режим. Это изменит объект в observableCollection.

3) Является ли объект в ObservableCollection все еще экземпляром исходной сущности linq, и поэтому изменение отражается в базе данных (когда вызывается submitchanges)

У меня должен быть какой-то метод сохранения в репозитории. Но когда мне это назвать? Что произойдет, если кто-то отредактирует поле, но решит не сохранять его, перейдет к другому объекту и отредактирует его, а затем нажмите «Сохранить». Не сохраняется ли оригинальное изменение? Когда он не запоминает изменения объекта сущности linq. Должен ли я создавать экземпляр класса Datacontext в каждом методе, чтобы он терял область видимости после завершения.

4) Когда и как вызывать метод SubmitChanges

5) Должен ли я иметь DataContext в качестве переменной-члена класса репозитория или переменной метода

Чтобы добавить новую строку, я должен создать новый объект в событии («новое» нажатие кнопки), а затем добавить его в базу данных, используя метод репо.

6) Когда я добавлю объект в базу данных, в ObservableCollection не будет нового объекта. Обновляю ли я как-нибудь.

7) Я не хочу повторно использовать окно редактирования при создании нового, но не уверен, как динамически перейти от ссылки на выбранный элемент из списка к этому новому объекту. Любые примеры, которые вы можете указать.

1 Ответ

1 голос
/ 15 июня 2010

много вопросов!Я отвечу на несколько.

1) Используйте IQueryable всякий раз, когда вы хотите выполнить запрос LINQ.Использование ключевого слова var вместо указания типа также является предпочтительным.

2) ObservableCollection обеспечивает механизм уведомления всякий раз, когда количество элементов в коллекции изменяется.Таким образом, элемент управления списком может обновляться при изменении коллекции.

ПРИМЕЧАНИЕ. Вам все еще нужно реализовать интерфейс INotifyPropertyChanged для уведомления об изменениях свойств для отдельных объектов в коллекции.

3) Я рекомендуюхранение сущностей LINQ непосредственно в коллекции.Причина в том, что если вы хотите распространить изменения обратно в базу данных, вы должны оставить DataContext открытым, из которого была создана эта сущность.Это сохраняет соединение открытым и не рекомендуется.

4) Всякий раз, когда вы хотите внести изменения в базу данных, создайте новый DataContext, выберите объекты, которые вы хотите изменить, измените их свойства и вызовите метод SubmitChanges ().Закройте DataContext после этого.

5) Как я уже сказал, создайте новый экземпляр DataContext всякий раз, когда вы хотите выбрать объекты из базы данных или отправить изменения обратно в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...