Frage

Wir brauchen die Anwendung, die wir Datenbank-agnostisch bauen sein. Insbesondere müssen sie ich in der Lage die Arbeit mit SQL Server, Oracle und MySQL sein. In Zukunft wird möglicherweise andere DB Vendors in die Liste aufgenommen werden. Natürlich, was auch immer DB ist das gleiche Schema wird verwendet werden.

Um einen Prototyp zu bauen, die Schnittstelle zu demonstrieren, luden wir das Schema in einer SQL Server DB und erzeugen dann den Datensatz und Tableadapter für diese Datenbank. Da die Datenmenge durch eine bestimmte Instanz einer Datenbank generiert wurde, vermute ich, dass die erzeugte Datensatz und Tableadapters sind nicht herstellerunabhängig. Außerdem bin ich nicht einmal sicher, ob sie für eine andere SQL Server DB-Instanz verwendet werden.

Meine Frage ist:  Gibt es eine Möglichkeit, den gleichen automatisch generierten DataSet und Tableadapters mit verschiedenen Datenbanken zu verwenden (und möglicherweise Anbieter)?

Cheers,

Markos

War es hilfreich?

Lösung

In der Regel, wenn Sie Ihre Datenbank-Code gegen die System.Data.Common Namensraum, wird es als Agnostiker sein, wie es sein kann. Es gibt viele Einschränkungen beteiligt, aber da jeder Datenbank-Anbieter seine eigene spezielle Implementierung Ebene Details hat, die vom Rest unterscheiden.

Ein Beispiel für eine Datenbank-agnostischen Ansatz System.Data.Common wie folgt aussieht:

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);

    // ...
}

Sie einfach die erste Zeile ändern Datenbank-Anbieter zu wechseln, und der Rest des Codes kann so ziemlich gleich bleiben.

Dieser Ansatz verwendet eine Menge von Hand-Codierung. Sie könnten mit Hilfe einer Datenbank Rahmen betrachten wie NHibernate (wie von David Basarab erwähnt), Subsonic oder die Microsoft Enterprise Library Data Access Application Block nur einige zu nennen.

Andere Tipps

Ich glaube, Sie sind Spitze den falschen Weg. Ich würde mit NHibernate

ich es jeden Tag benutzen und es ist Datenbank Agnostiker.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top