2009-04-08 6 views
5

Ich arbeite in einem Microsoft .NET Shop, wo es in Ordnung ist, NHibernate oder ADO.NET EF zu verwenden. Welche Anleitung sollten wir verwenden, wenn Sie eine über die andere wählen sollten?ADO.NET Entity Framework und NHibernate - wenn man einen über dem anderen verwendet

Zum Beispiel scheint es, als würde beim Schreiben einer Silverlight-App die EF-to-> ADO.NET Data Services-to-> Silverlight eine Produktivitätssteigerung bieten und Ihnen eine REST-Service-API ohne zusätzlichen Aufwand zur Verfügung stellen.

Welche anderen Dinge sollten Sie bei der App für jede App unterstützen?

UPDATE (basierend auf Kommentar): Dieser etwas nützlich ist What differentiates Nhibernate from other ORM’s? die anderen gehen in seltsame Tangenten (wie SubSonic) und nicht direkt die beiden vergleichen. Ich denke, ich suche gezielt nach Leuten, die beides benutzen, und entscheide über ein Projekt nach dem anderen, welches sie benutzen werden.

+0

Dies ist ein Duplikat viele Male vorbei. Schauen Sie sich die verwandten Fragen auf der rechten Seite dieser Seite an. –

Antwort

6

Kurz gesagt, EF hat keine Ausdauer Ignoranz-Unterstützung aus der Box. Als ich letztes Jahr zum ersten Mal versucht habe, eine Lösung mit EF zu erstellen, war ich ein wenig genervt, dass Sie keine POCOs in Ihrer Anwendung haben können. Ich wollte einen höheren Grad der Entkopplung mit meinem Modell, also wechselte ich zu NHibernate. Seitdem hat jemand einen EF POCO Adapter geschrieben. http://code.msdn.microsoft.com/EFPocoAdapter - aber es ist wirklich nur ein Codegenerator, der eine Adapterschicht generiert, um Ihre Objekte abzubilden.

Aus irgendeinem Grund lief meine App auch unter NHibernate ein wenig schneller. Nehmen Sie das mit einem Körnchen Salz, denn ich war neu, um beide Lösungen zu konfigurieren.

+0

Persistence Ignoranz scheint für EF v2.0 geplant zu sein, das mit .NET 4 ausgeliefert werden sollte.0/VS 2010, irgendwann Anfang 2010 –

+0

Danke für die Info. Gut, Ausdauer zu hören Ignoranz kommt in v2. Werde mir den Adapter ansehen, hatte das vorher nicht gesehen. Aber in den nächsten 18 Monaten denke ich, dass ich hauptsächlich bei NH bleiben werde. Ich habe bereits gelernt, wie man diese veralteten Konfigurationsdateien schreibt;) – BuddyJoe

+0

... und jetzt müssen Sie das Mapping erneut verlernen, da jeder, der "cool" ist, es jetzt fließend macht :) http://fluenthibernate.org/ – HenningK

2

Ich würde wahrscheinlich das Entity Framework für jetzt komplett vermeiden. Es gibt die vote of no confidence, die das famework gegeben hat, nicht zu erwähnen, dass es nicht so reif wie NHibernate ist.

Nachdem ich das gesagt habe, würde ich weiterhin das Entity Framework evaluieren, da ich sicher bin, dass es im Laufe der Zeit verbessert wird.

+0

+1 hatte das "vote of no conf" gesehen und die Blogbeiträge über die fehlende oder fehlende Funktionalität. Aber dein Recht, es zu verbessern. Bei dem dritten Versuch wird Microsoft normalerweise richtig verstanden. – BuddyJoe

4

Microsoft hat kürzlich damit begonnen, eine neue Lösung mit der Bezeichnung .NET Ria Services (vorerst) zu entwickeln, die "ORM-unabhängig" sein wird, um Daten von einer auf dem Server befindlichen Geschäftslogikschicht in Silverlight zu übertragen.

Sie haben öffentlich erwähnt (auf Dias bei MIX sogar), dass NH WILL hier unterstützt wird.

Wenn Sie nach einer Lösung suchen, die den meisten Community-Support bietet, ist NHibernate definitiv die Antwort. Ich gebe zu, dass es eine steile Lernkurve hat, aber nach meiner Erfahrung ist es es auf jeden Fall wert. Machen Sie eine vergleichende Suche nach "entity framework" und "nhibernate" und Sie werden sehen, was ich meine. Die meisten EF-Sachen werden "gedrückt", während die NHibernate-Sachen tatsächlich technische, blutige Details sind. Und Fragen. Beantwortet werden.

Aber wie andere Poster erwähnt haben - ich bin mir sicher, dass sich das Entity Framework im Laufe der Zeit verbessern wird. Im Moment glaube ich, dass sie versuchen, mit einem Toolset zu viele Probleme zu lösen. NHibernate macht nur eine Sache, tut es aber außergewöhnlich gut.

Hier gibt es auch das Problem des Anwendungsdesigns. EF scheint (in seiner aktuellen Version) so aufgebaut zu sein, dass es eine Datenbank an eine C# -Anwendung liefert. NHibernate geht in die andere Richtung und macht es einfacher, ein Objektmodell zu erhalten.

+0

+1 gute Gedanken. Sie müssen mich nicht auf NHibernate verkaufen. Ich habe jetzt seit ungefähr 3 Monaten daran gegraben. Ich finde es viel anpassungsfähiger und modularer als EF. Die NH-Art, es zu tun, spricht zu mir. LINQ mit EF fühlt sich immer noch etwas fremd an. – BuddyJoe

+1

Wird auf den RIA Services nachlesen. – BuddyJoe