2009-11-08 3 views
5

Viele Produktentwickler möchten eine .NET-Anwendung schreiben, die nahtlos mit allen gängigen RDBMS wie SQL Server, Oracle, DB2, MySql funktioniert. Wenn wir den Datenanwendungsblock verwenden, wählt er dynamisch den Datenbanktreiber (OracleClient, SQLClient oder OleDBClient) basierend auf der Konfiguration aus.Datenbankneutrale .NET-Anwendung

Alle Datenbanken haben jedoch ihre eigenen Varianten von SQL. Es gibt feine Unterschiede, die verhindern, dass eine SQL-Codebasis universell verwendet wird - die Funktionsnamen sind unterschiedlich, die Art und Weise, wie Datumsangaben gehandhabt werden, sind unterschiedlich, die Art, wie Identitätsspalten gehandhabt werden, und so weiter.

Man könnte ein Produkt von Drittanbietern von Data Direct verwenden, um DB-neutralen Code mit vordefinierten Escape-Sequenzen zu schreiben.

Gibt es Tools oder Produkte von Microsoft, die dieses Problem beheben?

Antwort

12

Das Microsoft ADO.NET Entity Framework ist ein Object-Relational Mapping Framework von Microsoft, das entwickelt wurde, damit Sie Code schreiben können, der (etwas) DB-agnostisch ist. Alle großen DBMS unterstützen das Entity Framework, obwohl Sie für viele (z. B. MySQL, Postgres) etwas von Ihrer .NET Framework-Installation herunterladen müssen.

Hinweis: Ich muss noch an einem einzigen großen Projekt mit einem O/RM-Tool arbeiten, bei dem es nicht mindestens einen Fall gab, bei dem wir Native SQL verwenden mussten - entweder für DB-spezifische Funktionalität oder für Leistungsgründe (erforderlich, um eine Abfrage in einer bestimmten Weise zu schreiben, um einen guten Abfrageplan zu erhalten). Aber ein gutes O/RM kann die meiste Zeit arbeiten, um das Schreiben von SQL zu verhindern.

Die aktuelle Version des Entity Framework ist in einer Reihe von Dimensionen ziemlich begrenzt - andere O/RM-Frameworks wie NHibernate, SubSonic usw. sind viel ausgereifter, wobei "ausgereift" bedeutet, einen tieferen Bereich zu unterstützen von DBMS-Funktionen, ohne Shell-Native-SQL-, Community-Unterstützung, bessere Leistung, etc.

Das ist meine höfliche Art zu sagen, dass, für ein reales, relativ komplexes Projekt, denke ich nicht, dass Die aktuelle Version des Entity Framework ist der beste Weg, um relativ zu den anderen verfügbaren O/RM-Tools zu gehen.

Offenbar ist die kommende .NET 4.0/VS2010 version of the Microsoft Entity Framework viel verbessert, so dass die obige Aussage möglicherweise nicht wahr ist nächstes Jahr. Das neue Entity Framework fügt beispielsweise DDL-Unterstützung hinzu, sodass Sie Tabellen und Indizes auf DBMS-unabhängige Weise erstellen können. Außerdem nutzt das .NET 4.0 Entity Framework ein cooles Feature namens T4 Templates, das ein nettes Feature ist, um Code zur Build-Zeit automatisch zu erzeugen, was wichtig für Dinge wie O/RM Wrapper ist, die mit einem externen synchronisiert werden müssen DB-Schema - und das sollte eine bessere (aka vorkompilierte) Leistung als O/RM-Tools, die die Arten von Datenbankspalten bis zur Laufzeit nicht kennen.

+0

+1 Eine gute und umfassende Antwort. Es ist erwähnenswert, dass die EF derzeit nur RDBMS unterstützt. Das war es, worum das OP gebeten hat, also habe ich keine Probleme mit Ihrer Antwort, aber ich möchte nur darauf hinweisen, dass EF Ihnen nicht helfen wird, wenn Sie plötzlich über einen REST-Dienst auf Daten zugreifen müssen oder nicht-relational Datenquellen. –

+0

EntityFramework funktioniert nicht mit Informix (Satans eigene Datenbank) –

1

Nicht direkt von Microsoft. Diese Werkzeuge werden üblicherweise Object-Relational Mapper oder kurz ORM genannt. Zum Beispiel ist NHibernate ein gebräuchliches und weit verbreitetes ORM, das sehr genau Ihren Anforderungen entspricht. Natürlich gibt es andere kommerzielle Produkte wie Telerik OpenAccess ORM, DevExpress XPO oder RemObjects DataAbstract, die Ihnen helfen, datenbankunabhängig zu sein.

+0

Dort * ist * ein ORM direkt von MS: das Entity Framework. –

+0

Ein weiterer Aspekt von ORMs ist nicht nur das "Standard" SQL, das man verwenden kann, sondern auch die schiere Menge an Standardcode, den man speichern kann (Transaktions- und LOB-Handling, um nur zwei Dinge zu nennen, die einem einfallen). – davek

2

Wie ich verstanden habe, suchen Sie nach Werkzeug zum Schreiben von RDBMS-unabhängigen SQL, aber kein ORM. Dies ist ein sehr konkretes Problem, das von verschiedenen ORM-Anbietern auf unterschiedliche Weise gelöst wird. Ich kann nur XtensiveSQL DOM Werkzeug erwähnen, das für ihre ORM - DataObjects.Net entwickelt wurde. Es ist eine Abstraktion über SQL, die es ermöglicht, Abfragen mit dem DOM-Modell mit vollem Funktionsumfang zu schreiben. Momentan wird das SQL-DOM nicht getrennt von DataObjects.Net propagiert, aber es ist ein Open-Source-Produkt und Sie können seine Autoren sicherlich danach fragen.Soweit ich weiß, wird es in einigen Drittprojekten erfolgreich eingesetzt.