.Net: как создать независимый от поставщика набор данных, табличные адаптеры, привязки (БД определяется во время выполнения) - PullRequest
0 голосов
/ 29 июня 2009

У меня есть приложение C # Windows Forms, прототип которого был создан на SQL Server (строго типизированный набор данных). В окончательной версии приложение должно работать с SQL Server, MySQL или Oracle.

Теперь мне интересно, какие части (если таковые имеются) можно повторно использовать из прототипа. 1. Набор данных (напечатан)? 2. TableAdapters? (вероятно, нет, они содержат специфичный для SQL Server синтаксис) 3. Привязки к DataGridViews

Самое главное, если нам нужно заново все это реализовать, есть ли способ сделать это во время разработки? Или же, 1. нужно ли программно создавать нетипизированный набор данных? 2. нужно ли программно создавать свои адаптеры данных (или адаптеры таблиц)? Если да, то какой из двух? 3. Нужно ли нам программно создавать привязки к представлениям данных интерфейса?

Возможно, не имеет значения: если мы создадим модель сущности (AFAIK, которая обеспечивает независимость БД) от существующей схемы БД, можем ли мы использовать это каким-либо образом для создания привязок к нашим представлениям данных?

Спасибо!

Итак, чтобы сохранить наши Bindings и dataGridViews, а также некоторую дополнительную логику, которую мы реализовали, должны ли мы выбросить все сгенерированные TableAdapter и написать их вручную? Если мы их выбрасываем, должны ли мы вместо этого использовать DataAdapters?

Является ли это подходом «по книге»? Кто-нибудь делал что-то подобное?

В более общем случае, если вам нужно создать приложение Forms для работы с несколькими базами данных, сделайте это: A. с нетипизированным набором данных, адаптерами данных / таблицами и привязками, созданными вручную B. Каким-то образом создайте независимый от поставщика набор данных и адаптера данных / tableadapters (как?) и связать их во время разработки через VS gui C. каким-либо другим способом ???

UPDATE:

Итак, чтобы сохранить наши Bindings и dataGridViews, а также некоторую дополнительную логику, которую мы реализовали, должны ли мы выбросить все сгенерированные TableAdapter и написать их вручную? Если мы их выбрасываем, должны ли мы вместо этого использовать DataAdapters?

Является ли это подходом «по книге»? Кто-нибудь делал что-то подобное?

В более общем случае, если вам нужно создать приложение Forms для работы с несколькими базами данных, сделайте это: A. с нетипизированным набором данных, адаптерами данных / таблицами и привязками, созданными вручную B. Каким-то образом создайте независимый от поставщика набор данных и адаптера данных / tableadapters (как?) и связать их во время разработки через VS gui C. каким-либо другим способом ???

Ответы [ 2 ]

3 голосов
/ 29 июня 2009
  1. Типизированный набор данных / таблица не зависит от базы данных. (однако, если вы добавляете адаптеры в конструктор, они зависят от БД. Не используйте адаптеры из конструктора
  2. Адаптеры НЕ независимы от базы данных.
  3. Привязка данных не зависит от базы данных. Но остерегайтесь привязки данных с помощью перетаскивания, автоматически добавляя адаптер


Мой совет:

  • Удалить adpaters из набора данных дизайнер
  • Перепишите свои собственные репозитории / адаптеры, используя простой класс с методами, которые получают / заполняют столы. Таким образом, вы используете их вместо сгенерированных адаптеров. Эти классы могут быть специфичными для БД. Так, например, PersonRepositorySqlServer, PersonRepositoryMySql. Или, возможно, вы дадите db-тип с помощью конструктора для максимально возможного повторного использования SQL ..
  • Если вы использовали адаптер в своих формах, удалить их в. Ручной код заполнения набора данных

Что я всегда делаю, чтобы ответить на остальные вопросы

  • Я использую типизированные наборы данных, но я просто создаю таблицы, а не адаптеры
  • Я обычно кодирую привязки данных, так как иногда дизайнер портит, но это не обязательно, чтобы быть независимым от БД
  • Я пишу свои собственные репозитории, которые используют адаптеры для заполнения / получения / обновления таблиц данных. тем не мение Я кодирую их вручную. Учитывая типизированную таблицу данных, довольно легко автоматически генерировать операторы update / insert / delete / fill по пути ..



Переписать адаптеры выглядит сложно, но на самом деле это вполне выполнимо.

2 голосов
/ 29 июня 2009

Много вопросов, вот несколько ответов:

  • Наборы данных не зависят от БД. Типизированные наборы данных, вероятно, также.
  • Адаптеры данных до сих пор зависят от БД, поскольку они содержат SQL для связи с БД
  • Существуют абстракции и возможности работать независимо от поставщика с базовыми концепциями ADO.NET (IDbConnection, IDbCommand и т.
  • Вы также можете связать простые старые объекты c # с BindingSource и друзьями. Если вы пойдете по этому пути, приготовьтесь выбросить почти все, что вы создали. Вам потребуется структура, которая может переводить между «сущностями» и БД. От того, как будут ограничены ваши сущности и как будет выглядеть независимость вашей БД, будет зависеть от этой структуры.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...