.net: Являются ли DataSet и TableAdapters независимыми от базы данных и поставщика? - PullRequest
2 голосов
/ 19 июня 2009

Нам нужно приложение, которое мы создаем, чтобы быть независимым от базы данных. В частности, он нужен для работы с SQL Server, Oracle и MySQL. В будущем, возможно, другие поставщики БД будут добавлены в список. Конечно, любая используемая БД будет иметь одинаковую схему.

Чтобы создать прототип для демонстрации интерфейса, мы загрузили схему в БД SQL Server, а затем сгенерировали DataSet и TableAdapters для этой базы данных. Поскольку набор данных был сгенерирован конкретным экземпляром базы данных, я подозреваю, что сгенерированные DataSet и TableAdapters не зависят от поставщика. Более того, я даже не уверен, могут ли они использоваться для другого экземпляра БД SQL Server.

Мой вопрос такой: Есть ли способ использовать одни и те же автоматически сгенерированные DataSet и TableAdapters с разными базами данных (и, возможно, поставщиками)?

Приветствия

Markos

Ответы [ 2 ]

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

Как правило, если вы разрабатываете код своей базы данных для пространства имен System.Data.Common , он будет настолько независимым, насколько это возможно.Однако существует множество предостережений, поскольку каждый поставщик баз данных имеет свои собственные подробности уровня реализации, которые отличаются от остальных.

Пример независимого от базы данных подхода с использованием System.Data.Common выглядит следующим образом:

var factory = DbProviderFactories.GetFactory("My Provider Name");
using (var connection = factory.CreateConnection())
{
    connection.ConnectionString = "My Connection String";
    connection.Open();

    var cmd = factory.CreateCommand();
    cmd.CommandText = "My Command Text";
    cmd.Connection = connection;

    var adapter = factory.CreateDataAdapter();
    adapter.SelectCommand = cmd;

    var dataset = new DataSet();
    adapter.Fill(dataset);

    // ...
}

Просто измените первую строку для переключения поставщиков базы данных, а остальная часть кода может остаться прежней.

Этот подход использует много ручного кодирования.Вы можете рассмотреть возможность использования структуры базы данных, такой как NHibernate (как упомянуто Дэвидом Басарабом), Subsonic или Блок приложения для доступа к данным Microsoft Enterprise Library и многие другие.

0 голосов
/ 19 июня 2009

Я думаю, что вы движетесь по неверному пути. Я бы пошел с NHibernate

Я использую его каждый день, и это не зависит от базы данных.

...