Wir überprüfen gerade, ob wir das EF4 in unserem Projekt einsetzten können. Wir haben die Aufgabenstellung einen datenbankunabhängigen Data Access Layer zu programmieren. Wenn möglich sollen wir das EF4 verwenden.
Ich habe mal einige Tests gemacht und versucht das EF4 Modell mit verschiedenen Datenbanken zum Laufen zu bekommen. Leider musste ich feststellen, dass das EF-Model (EDMX-File) nicht so datenbankunabhängig ist wie ich gehofft habe. Es gibt zwar im Internet eine Anleitung wie man das SSDL-Model für eine anderen Datenbank anpassen kann damit es funkioniert, aber in meinen Tests lief der Code entweder nur mit der Datenbank A oder nur mit der Datenbank B, aber nie mit beiden gleichzeitig. Die Datenbanken wurde exakt gleich erzeugt nur einmal als Sybase-DB und einmal im MS-SQLServer. Für die Erzeugung der Business-Objecte habe ich die T4-Vorlagen verwendet und damit meine POCOs oder STEs erzeugt.
Fragen: Kann man das EF4 für einen solchen datenbankunabhängigen Zugriff überhaupt verwenden? Wie sind Eure Erfahrungen? Hat das schonmal jemand gemacht?
nach meinen Erfahrungen ist das EF eigentlich nur mit dem Microsoft SQL Server problemlos zu benutzen (ist halt von Microsoft ;-)). Oracle hat gerade offiziell einen Provider herausgebracht (http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html). Ansonsten wirst du wahrscheinlich Geld in die Hand nehmen müssen, um ein entsprechendes Produkt zu kaufen oder du musst deinen eigenen Provider schreiben. Hierzu habe ich noch einen etwas älteren Link in meiner Sammlung gefunden: http://archive.msdn.microsoft.com/adonetefx.
Wenn es um Datenbankunabhängikeit geht, würde ich auf NHibernate setzen. Es ist Open-Source, wird intensiv gepflegt, hat eine große Community und unterstützt alle gängigen Datenbanken. Ich habe das Tool in verschiedenen Projekten mit unterschiedlichen Datenbanken erfolgeich eingesetzt. Ich hatte zwar nie die Anforderung, unterschiedlilche Datenbanken in einer Anwendung zu unterstützen, aber das Konfigurationssystem von NHibernate lässt dies prinzipiell zu.
Danke für deine Antwort. Werde mir dann wohl mal NHibernate mal anschauen. Du schreibst, dass es wohl auch kommerzielle Produkte gibt. Kannst du mir welche nennen?
ich setzte EntitySpaces (http://www.entityspaces.net/Portal/Default.aspx) ein, allerdings nur mit MSSQL, kann aber auch mit div. anderen Datenbanken (MySQL, Oracle, PostgreSQL, Sybase) genutzt werden.
Danke für die ganzen Tipps. Werde wir EntitySpaces und den ORM von Telerik mal genauer anschauen, auf den ersten Blick sehen sie sehr vielversprechend aus.