2009-04-08 6 views
5

Je travaille dans un magasin Microsoft .NET où il est acceptable d'utiliser NHibernate ou ADO.NET EF. Quels conseils devrions-nous utiliser quand vous devriez choisir l'un plutôt que l'autre? Par exemple, il semble que lors de l'écriture d'une application Silverlight, les services de données EF-to-> ADO.NET Data-> Silverlight offrent une amélioration de la productivité et vous fournissent une API de service REST sans effort supplémentaire.ADO.NET Entity Framework et NHibernate - quand utiliser l'un par rapport à l'autre

Quelles sont les autres choses qui devraient vous guider d'une application à l'autre?

UPDATE (basé sur un commentaire): Celui-ci est un peu utile What differentiates Nhibernate from other ORM’s? les autres vont au loin dans tangentes étranges (comme subsonique) et ne se comparent pas directement les deux. Je suppose que je suis spécifiquement à la recherche de personnes qui utilisent les deux, et décider sur un projet par projet celui qu'ils vont utiliser.

+0

Il s'agit d'un doublon plusieurs fois. Il suffit de regarder les questions connexes sur le côté droit de cette page. –

Répondre

6

En un mot, EF n'a pas de support de persistance d'ignorance prêt à l'emploi. Quand j'ai essayé pour la première fois de construire une solution avec EF l'année dernière, j'étais un peu agacé que vous ne puissiez pas avoir de POCO dans votre application. Je voulais un plus haut degré de découplage avec mon modèle, donc j'ai fini par passer à NHibernate. Depuis, quelqu'un a écrit un adaptateur EF POCO. http://code.msdn.microsoft.com/EFPocoAdapter - mais ce n'est vraiment qu'un générateur de code qui génère une couche d'adaptateur pour mapper vos objets.

Pour une raison quelconque, mon application fonctionnait également un peu plus rapidement sous NHibernate. Prenez cela avec un grain de sel parce que j'étais nouveau à la configuration de l'une ou l'autre solution.

+0

PE ignorance semble être prévu pour EF v2.0 qui devrait être livré avec .NET 4.0/VS 2010, au début de 2010 –

+0

Merci pour l'info. Bon à entendre persistence ignorance arrive en v2. Jetez un oeil à l'adaptateur, n'avait pas vu ça avant. Mais dans les 18 prochains mois, je pense que je vais surtout coller avec NH. J'ai déjà appris à écrire ces fichiers de configuration;) – BuddyJoe

+0

... et maintenant vous devrez désapprendre le mapping à nouveau, car tout le monde qui est "cool" le fait maintenant couramment :) http://fluentnhibernate.org/ – HenningK

2

J'éviterais probablement complètement le cadre d'entité pour l'instant. Il y a le vote of no confidence que le famework a été donné, pour ne pas mentionner il n'est pas aussi mûr que NHibernate. Cela dit, je continuerais à évaluer le cadre de l'entité, car je suis sûr qu'il sera amélioré au fil du temps.

+0

+1 avait vu le "vote de pas de conf", et les articles de blog sur les fonctionnalités manquant ou manquant. Mais votre droit à ce sujet s'améliore. Microsoft obtient habituellement des choses juste par le troisième essai. – BuddyJoe

4

Microsoft a récemment commencé à développer une nouvelle solution, appelée .NET Ria Services (pour l'instant), qui sera «indépendante de l'ORM» pour l'entrée et la sortie des données de Silverlight à partir d'une couche logicielle métier sur le serveur.

Ils ont publiquement mentionné (sur les diapositives au MIX, même) que NH WILL être pris en charge ici.

Si vous êtes à la recherche d'une solution qui bénéficie du plus grand soutien de la communauté, NHibernate est définitivement la solution. Je concède qu'il a une courbe d'apprentissage abrupte, mais selon mon expérience, cela en vaut certainement la peine. Faites simplement une recherche comparative pour "framework d'entité" et "nhibernate", et vous verrez ce que je veux dire. La plupart des trucs EF seront "presse", tandis que les trucs NHibernate seront en fait des détails techniques et sanglants. Et des questions. Être répondu.

Mais comme d'autres affiches l'ont mentionné - je suis sûr que Entity Framework va s'améliorer avec le temps. Pour l'instant cependant, je crois qu'ils essaient de résoudre trop de problèmes avec un seul jeu d'outils. NHibernate ne fait qu'une chose, mais le fait exceptionnellement bien.

Il y a aussi le problème de la conception d'application ici. EF semble être (dans son incarnation actuelle) construit pour fournir une base de données à une application C#. NHibernate va dans l'autre sens, et rend plus facile l'obtention d'un modèle objet persistant.

+0

+1 bonnes pensées. Vous n'êtes pas obligé de me vendre sur NHibernate. Je l'ai creusé depuis environ 3 mois maintenant. Je le trouve beaucoup plus personnalisable et modulaire que EF. La façon NH de le faire me parle. LINQ avec EF se sent encore un peu étranger. – BuddyJoe

+1

Lira sur les services RIA. – BuddyJoe

Questions connexes