EF vs. NHibernate [geschlossen]

8

In den letzten 2 Jahren, seit ich angefangen habe, Geschäftsanwendungen zu schreiben (bevor ich entweder Front-End- oder Systemprogrammierung auf sehr niedriger Ebene durchgeführt habe), habe ich Datasets, Linq to SQL und jetzt Entity Framework gelernt. Die logische Sache, die als nächstes zu betrachten ist, scheint NHibernate zu sein.

Gründe, warum ich letztendlich bei EF gelandet bin, sind: (1) es hat die beste Designerunterstützung und (2) es wird am meisten von Microsoft unterstützt.

Gründe (diese haben Vermutungselemente), die mich an NHibernate interessieren, sind: (1) Es wird möglicherweise nicht so schnell von einer völlig anderen Sache abgelöst, wie MS Datenzugriffstechnologien umwandelt. (2) Es scheint, als ob es entweder das vordere Rennen oder das zweite ist Front Running Tool für das, was es tut und (3) Es scheint ziemlich stabil und über die Zeit zurückverfolgbar zu sein.

Hat jemand einen Vergleich der beiden veröffentlicht? Ist eine für bestimmte Arten von Architekturen besser als die andere? Oder ist es nur eine Frage des Stils und der Präferenz?

Aaron Anodide
quelle

Antworten:

6

An diesem Punkt denke ich, dass die wichtigsten (einzigen?) Vorteile, die NH gegenüber EF hat, einige sehr feinkörnige Abrufstrategien sind . Anstatt alles faul zu laden ODER eifrig zu laden, bietet NH Ihnen einige sehr schöne Zwischenoptionen.

Trotzdem brauchte ich nie so viel Kontrolle über meinen Datenzugriff, und so hat die Einfachheit von EF die Wahl leicht gemacht.

Beachten Sie jedoch, dass die EF-Designerdatei, mit der Sie sonst so gut arbeiten können, zu einem Albtraum bei der Quellcodeverwaltung werden kann. es verschmilzt nicht gut oder überhaupt nicht. Stellen Sie sicher, dass Sie es mit einer expliziten Sperre auschecken, wenn Sie etwas ändern müssen.

Adam Rackis
quelle
3
+1 für die Designer-Sache. Ich hatte keine guten Erfahrungen mit irgendetwas, das mit einem Designer zu tun hatte.
Codism
Vergessen Sie nicht, immer mit einer anderen Datenbank als SQLServer arbeiten zu können. EF generiert in einigen Fällen nicht standardmäßiges SQL.
Gbjbaanb
Können Sie das Zusammenführungsproblem umgehen, indem Sie die Designer-Datei in Ihre Ignorierliste einfügen und neu generieren, da die Änderungen in der edmx-Datei wiedergegeben werden?
Aaron Anodide
1
@ Gabriel, ich denke, die edmx-Datei ist die Ursache für die Probleme. Die Leute aktualisieren den Designer, der den edmx ändert, und checken dann ein. Wenn andere das Gleiche getan haben, bricht die Hölle los.
Adam Rackis
5
Wenn Sie den Download des (offiziellen, von Microsoft unterstützten, aber nicht in .NET 4.0 enthaltenen) EF 4.1 herunterladen , können Sie Code First verwenden und Ihre Zuordnungen sehr ähnlich wie bei FluentNHibernate zusammenstellen. Funktioniert sehr gut mit der Quellcodeverwaltung.
Aaronaught
3

Wir machen ein Projekt, bei dem der Architekt NHibernate gegenüber EF ausgewählt hat. Ich wünschte, die Wahl wäre in die andere Richtung gegangen, da von Anfang an eine Publisher-Subscriber-Anforderung bestand.

Wenn Sie vorhaben , das Synchronisierungsframework zu verwenden , wählen Sie EF, da NHibernate die Aktualisierungen (in den Spalten, in denen angegeben wird, woher die Daten stammen, wer sie geändert hat und meine neueste Kopie ist), die hinter den Kulissen stattfinden, nicht bewältigen kann.

Wenn Sie Daten von einer Datenbank in eine andere replizieren müssen (und die Primärschlüssel gleich lassen müssen), ist die session.ReplicateFunktion schlecht dokumentiert und scheint länger zu dauern als eine direkte Kopie.

Tangurena
quelle