2010-05-20 2 views
8

Ich weiß, das wurde mehrmals gefragt, und ich habe alle Beiträge gelesen, aber sie alle sind sehr alt. Angesichts der Fortschritte bei Versionen und Releases hoffe ich, dass es neue Ansichten geben könnte.Entity Framework vs. nHibernate für Leistung, Lernkurve Gesamtfunktionen

Wir erstellen eine neue Anwendung auf ASP.NET MVC und müssen auf einem ORM-Tool abschließen. Wir haben ORM noch nie zuvor verwendet und sind ziemlich auf zwei - nHibernate & Entity Framework eingekocht.

Ich brauche wirklich einen Rat von jemandem, der diese beiden Tools verwendet hat und basierend auf Erfahrung empfehlen kann. Es gibt drei Punkte, die ich fertig bin mit Schwerpunkt auf -

  1. Leistung
  2. Learning Curve
  3. Gesamt Capability

Ihr Rat wird sehr geschätzt.

Mit besten Grüßen,

+2

.NET 3.5 oder .NET 4.0? Ich würde Ihnen empfehlen, sich von EF 1.0/3.5 fernzuhalten. –

Antwort

10

Ich würde Nhibernate verwenden. Ich würde packen Sharp Architecture als ein tolles Framework, das NHibernate, ASP.NET MVC und eine Reihe von anderen Open-Source-Tools in ein kohärentes Ganzes, das Ihnen eine solide architektonische Grundlage gibt Wraps.

Nhibernate ist reifer als EF4. Es wird von der Gemeinschaft gut unterstützt. Solange Sie bereit sind, Ihre Hände von Zeit zu Zeit schmutzig zu machen, werden Sie es mögen. Die Unterstützung für LINQ ist momentan etwas schwach, aber es wird immer besser. Die Lernkurve ist nicht schlecht, aber Dinge wie Session-Management können zunächst etwas verwirrend sein. Einer der Gründe, warum ich Sharp Architecture mag, ist, dass sie all das NHibernate-Zeug haben, das Sie an Ort und Stelle brauchen, und viele Hinweise, wie Sie es richtig in einem ASP.NET MVC-Projekt verwenden können.

EF4 hat den MS-Prüfsiegel. Es ist jetzt ziemlich gut, aber immer noch hinter NHibernate. Es ist eine vollkommen gute Wahl und Sie werden viele Dokumente von MS, MS-Support und eventuell mehr Entwicklern finden, die sich mit den Details auskennen. Ich sollte auch erwähnen, dass die Sharp Architecture-Leute Unterstützung für EF4 zu ihrem Gesamtrahmen hinzufügen. Sie werden weiterhin NHibernate unterstützen, aber Sie können EF4 verwenden, wenn Sie möchten.

+0

Hey, danke Tom für dich antworten. Ich bin sehr geneigt zur Sharp Arcitecture. Aber meine Sorge ist mit mehreren Artikeln über das Internet, die über Leistungsprobleme mit nHibernate erwähnen. Jetzt dachte ich, wenn du es richtig machst, kannst du wahrscheinlich eine bessere Leistung erzielen, aber dann legen mir und meinem Team wieder die Hände auf. – hadi

+1

@hadi: NHibernate ist kein Leistungsproblem. Das Leistungsproblem ist, wie Sie es verwenden. Wenn Sie beispielsweise "Lazy Loading" verwenden und eine große Ergebnismenge über eine große Ergebnismenge durchlaufen, die auf eine Eigenschaft zugreift, die für jede Iteration eine Datenbank-E/A verursacht, ist die Leistung schlecht. Ich empfehle dringend, eine Kopie des Nhibernate Profilers von http://nhprof.com/ zu erhalten, um Ihre Zugriffsmuster zu überprüfen und die Leistung gut zu halten. –

+0

Danke Kumpel, ich denke ich würde mit nHibernate fortfahren. Nochmals vielen Dank für Ihre Hilfe :) – hadi

2

Ich denke, es braucht mehr Zeit, um NHibernate zu lernen.

EF bietet grafischen Designer, leider hat NHibernate keinen generischen Designer. Übrigens ist es kein Problem. Wenn Sie domänengesteuert (DDD) entwerfen, werden Sie zuerst Ihre Entitäten entwerfen und Sie kümmern sich nicht um die Datenbankstruktur (wie Sie es gewohnt sind), NHibernate wird das für Sie übernehmen.

EF 4 näher an NHibernate. Ich würde nicht mit EF 3.5 arbeiten, es fehlen viele Features.

Wenn Sie denken, NHibernate ist auf den ersten Blick zu kompliziert, können Sie beginnen mit Frameworks auf NHibernate gebaut. ActiveRecords und Sharp Architect sind gute Beispiele.

AFAIR EF 3.5 unterstützt nur SQL Server 2000. Es konnte die neuen Datentypen von SQL Server 2005 nicht verarbeiten. Ich habe keine Informationen zu EF 4, aber ich nehme an, dass es diese Verbesserungen unterstützt.

Wenn Sie NHibernate in echten Wort-Anwendungen verwenden, müssen Sie eine Infrastruktur erstellen. Z.B. Ich implementierte die Unit of Work- und Repository-Muster, um Tests schreiben und Ebenen in meiner Anwendung erstellen zu können. Sie müssen dasselbe mit EF erwarten. Entfernen und Anhängen von Entitäten in EF 3.5 war keine leichte Sache, ich musste komplizierte Erweiterungsmethoden schreiben, um Felder schmutzig zu markieren und so weiter. Ich hoffe, dass sie es in EF 4 gelöst haben. Es gibt kein solches Problem mit NHibernate.

Sie müssen keine HQL-Abfragen in NHibernate schreiben, Sie können den LINQ-Provider verwenden. Ich denke, es ist sehr wichtig. :)

Alles in allem NHibernate ist ein ausgereiftes Produkt mit guter Community und kommerzieller Unterstützung. EF ist jung, wird aber von Microsoft stark unterstützt. Oh, und EF ist nur eine Microsoft-Sache, während Sie Ihr NHibernate-Wissen auch nach Java portieren können. Das zählt für dich.

+1

NHibernate hat einen grafischen Designer. –

+0

Ich arbeite mit SQLite und ich weiß nicht über grafische Designer, die es unterstützen. Bitte posten Sie einen Link, den ich gerne verwenden würde. Ich möchte einen Designer finden, der ein Datenbankschema für die Entitätszuordnung für die meisten unterstützten DBs (einschließlich SQLite) reverse-engineeren kann. – artur02

2

Ich versuche, dies zu prüfen ... Nach Apps in beide Gebäude, NHibernate ist definitiv stärker, aber es ist auch ziemlich klobig, wo EF ist sehr sauber . Und nach der Arbeit mit Rails/ActiveRecord sind beide im Vergleich sehr funktionsreich, also würde es definitiv funktionieren!

Ich habe bemerkt, dass NHibernate verfolgt, was es gerade ausgeführt hat, und wenn es nur eine Anweisung ausgeführt hat, wird es nicht erneut ausgeführt, so dass eine ordnungsgemäß gestaltete App minimale Datenbankanweisungen ausführt. Ich weiß, dass EF auch nicht gerade langsam ist, aber ich bin mir nicht sicher, ob es Aussagen und Ergebnisse auf die gleiche Weise zwischenspeichert. Für eine große App könnte dies einige Datenbankressourcen sparen!

Kurz gesagt, NHibernate für Funktionalität und Konfigurierbarkeit und EF 4.0 für Sauberkeit und eine schnelle und einfache Lernkurve. Außerdem sollte man EF in der nächsten Version erwarten, oder zwei sollten NHibernate in der Funktionalität ebenfalls übertreffen oder übertreffen, so dass es sinnvoll sein kann, mit beiden vertraut zu sein.