Frage

Ich versuche, über die beste Strategie zu entscheiden, für Zugriff auf die Datenbank. Ich verstehe, dass dies eine allgemeine Frage ist, und es gibt keine eine einzige gute Antwort, aber ich werde einige Leitlinien für das, was ich suche. In den letzten Jahren haben wir unsere eigene Persistenz-Framework wurde verwenden, dass, obwohl begrenzt, wie gut gedient hat. Allerdings braucht es einige wichtige Verbesserungen und ich frage mich, ob ich diesen Weg gehen sollte oder eine der bestehenden Frameworks verwenden. Die Kriterien, die ich suche, in der Reihenfolge ihrer Bedeutung sind:

  1. Client-Code sollte mit sauberen Objekten arbeitet, Breite keine Datenbankkenntnisse. Wenn unsere eigene Framework der Client-Code wie folgt aussieht:

    Sessionmanager-Sitzung = new Sessionmanager (); Bestellen order = session.CreateEntity (); order.Date = DateTime.Now; // Stellen Sie andere Eigenschaften Orderdetail Detail = order.AddOrderDetail (); detail.Product = Produkt; // Andere Eigenschaften

    // Alle Änderungen jetzt session.commit ();

  2. sollte so einfach wie möglich und nicht „zu flexibel“. Wir brauchen eine einzige Art und Weise die meisten Dinge zu tun.

  3. Sollte eine gute Unterstützung für die objektorientierte Programmierung. Sollte eine Eins-zu-viele handhaben und viele-zu-viele Beziehungen, sollte Vererbung, Unterstützung für verzögertes Laden behandeln.
  4. wird Konfiguration bevorzugt XML basieren.

Mit meiner derzeitigen Kenntnis Ich sehe diese Optionen:

  1. Verbessern Sie unseren aktuellen Rahmen - Problem ist, dass es ziemlich viel Aufwand braucht
  2. .
  3. ADO.NET Entity Framework - Verwenden Sie ein gutes Verständnis nicht haben, aber zu kompliziert scheint und hat schlechte Bewertungen
  4. .
  5. LINQ to SQL - keine gute Handhabung der objektorientierten Praktiken
  6. .
  7. nHibernate -. Es scheint eine gute Option, aber einige Nutzer berichten, zu viele archaische Fehler
  8. Subsonic - Von einer kurzen Einführung, wie es scheint zu flexibel. Ich will das nicht.

Was werden Sie vorschlagen?

EDIT:

Danke Craig für die aufwendige Antwort. Ich denke, es wird mehr helfen, wenn ich weitere Informationen über unsere kundenspezifischen Rahmen geben. Ich suche nach etwas ähnliches. Dies ist, wie unsere eigene Framework funktioniert:

  1. Es ist auf Datasets basiert, so dass das erste, was Sie tun, ist die Konfiguration Datasets und schreiben Anfragen müssen Sie es.
  2. Sie erstellen eine XML-Konfigurationsdatei, die angibt, wie DataSet Tabellen auf Objekte abzubilden und auch zwischen ihnen (Unterstützung für alle Arten von Verbänden) angeben Verbände. 3.A Anpassungs-Tool die XML-Konfigurations analysieren und den erforderlichen Code generieren. 4.Generated Klassen erben von einer gemeinsamen Basisklasse.

Um mit unserem Framework kompatibel zu sein die Datenbank diese Kriterien erfüllen müssen:

  1. Jede Tabelle sollte eine einzelne Spalte als Primärschlüssel haben.
  2. Alle Tabellen müssen einen Primärschlüssel des gleichen Datentypen auf die erzeugte haben Client.
  3. Vererbung behandeln nur einzelne Tabelle Vererbung wird unterstützt. Auch die XML-Datei, die fast immer bietet einen einzigen Weg, um etwas zu erreichen.

Was wir unterstützen wollen nun:

  • Entfernen Sie die Abhängigkeit von Datasets. SQL-Code automatisch generiert werden, aber der Rahmen sollte das Schema generieren. Ich möchte manuell das DB-Schema steuern.
  • Stabilere Unterstützung für Vererbungshierarchien.
  • Optionale Integration mit LINQ.

Ich hoffe, dass es jetzt klarer ist das, was ich suche.

War es hilfreich?

Lösung

  

Verbessern Sie unseren aktuellen Rahmen - Problem ist, dass es ziemlich viel Aufwand braucht

In Ihrer Frage, haben Sie keinen Grund gegeben, warum Sie Funktionalität neu schreiben sollte, die von so vielen anderen Orten zur Verfügung steht. Ich würde vorschlagen, dass ein ORM neu zu erfinden, ist keine gute Nutzung Ihrer Zeit, wenn Sie für die ORM einzigartige Bedürfnisse haben, die Sie nicht in Ihrer Frage angegeben haben.

  

ADO.NET Entity Framework

Wir sind mit dem Entity Framework in der realen Welt, Produktions-Software. Kompliziert? Nicht mehr, als die meisten anderen ORMs soweit ich das beurteilen kann, was zu sagen ist, „ziemlich kompliziert.“ Allerdings ist es relativ neu, und als solche gibt es weniger Gemeinschaftserfahrung und Dokumentation als etwas wie NHibernate. So ist der Mangel an Dokumentation kann es gut machen scheint komplizierter.

Das Entity Framework und NHibernate nehmen deutlich unterschiedliche Ansätze für das Problem der objektrelationalen Kluft überbrücken. Ich habe in ein gutes Stück näher in dieses Blog-Post . Sie sollten sich überlegen, welcher Ansatz am meisten Sinn macht für Sie.

Es hat vielen Kommentar über den Entity Framework, sowohl positive als auch negative. Ein Teil davon ist begründet, und einige der scheint von Menschen zu kommen, die andere Lösungen drängen. Die fundierte Kritik umfasst

  • Mangel an POCO-Unterstützung. Dies ist nicht ein Problem für einige Anwendungen ist es ein Problem für andere. POCO-Unterstützung wird wahrscheinlich in einer zukünftigen Version hinzugefügt werden, aber heute, das Beste, was die Entity Framework anbieten kann, ist IPOCO.
  • Eine monolithische Zuordnungsdatei. Das hat kein großes Problem für uns, da unsere Metadaten nicht in ständigem Fluss ist.

Allerdings scheinen einige der Kritikpunkte an mir, den Wald vor lauter Bäumen nicht zu verpassen. Das heißt, sie über andere Merkmale als die wesentliche Funktionalität von Object Relational Mapping sprechen, die das Entity Framework hat uns bewiesen, sehr gut zu machen.

  

LINQ to SQL - keine gute Handhabung der objektorientierten Praktiken

Ich bin damit einverstanden. Ich mag es nicht auch den SQL Server-Fokus.

  

nHibernate - scheint eine gute Option, aber einige Nutzer berichten, zu viele archaische Fehler

.

Nun, das ist das Schöne an NHibernate, dass es eine sehr lebendige Gemeinschaft ist um ihn herum, und wenn Sie diese esoterischen Fehler machen begegnen (und glauben Sie mir, auch das Entity Framework hat seinen Anteil an esoterischen Fehler, es scheint zu kommen mit das Gebiet) Sie können oft Lösungen sehr leicht finden. Das heißt, ich habe nicht viel persönliche Erfahrung mit NHibernate über die Bewertung haben wir das gemacht haben, die führte uns das Entity Framework der Wahl, also werde ich andere Menschen auf diese mit direkterer Erfahrung Kommentar lassen.

  

Subsonic - Von einer kurzen Einführung, wie es scheint zu flexibel. Ich will das nicht.

Subsonic ist natürlich viel mehr als nur ein ORM und SubSonic Benutzer haben die Möglichkeit, eine andere ORM Implementierung Wahl anstelle von Active mit SubSonic ist. Als Web Application Framework, ich würde es in Betracht ziehen. Allerdings ist seine ORM-Funktion ihre Daseinsberechtigung nicht, und ich denke, es ist vernünftig zu vermuten, dass der ORM Teil SubSonic wird weniger Aufmerksamkeit als die dediziert ORM Frameworks.

Andere Tipps

LLBLGen sehr gute ORM-Tool machen, die fast alle tun, was Sie brauchen.

iBATIS ist mein Favorit, weil Sie eine bessere Korn Kontrolle über die SQL

get

Developer Express Persistence Objekte oder XPO , wie es ist am bekanntesten. Ich benutze es für 3 Jahre. Es bietet alles, was man braucht, außer dass es kommerziell ist und Sie binden sich mit einem anderen (Einzelunternehmen) für Ihre Entwicklung. Other than that, Developer Express ist einer der besten Komponenten und Rahmenanbieter für die .NET-Plattform.

Ein Beispiel für XPO Code wäre:

using (UnitOfWork uow = new UnitOfWork())
{
  Order order = new Order(uow);
  order.Date = DateTime.Now();
  uow.CommitChanges();
}

Ich schlage vor, einen Blick auf die Active von Schloss Ich habe keine Produktion Erfahrung damit habe, habe ich nur mit ihrer Beispielanwendung rumgespielt. Es scheint wirklich einfach, mit zu arbeiten, aber ich weiß nicht, es gut genug, um zu wissen, ob es alle Ihre Anforderungen paßt

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