web-dev-qa-db-fra.com

Meilleur ORM à utiliser avec C # 4.0

la meilleure façon est d'utiliser un ORM comme Nhibertate ou Entity Framework ou de faire un ORM client. J'utiliserai cet ORM pour un projet C # 4.0

32
ma7moud

MISE À JOUR 2016

Six ans plus tard, les choses sont TRÈS différentes. NHibernate est presque abandonné, d'autres alternatives ont été abandonnées (par exemple Subsonic), Entity Framework est peut-être l'ORM complet le plus courant, et les gens ont migré vers des micro ORM comme Dapper pendant des années, pour mapper à partir de interroge des objets avec un minimum de surcharge.

Les scénarios d'application ont également changé. Au lieu de charger et de mettre en cache un graphe d'objets volumineux au détriment de la mémoire et des performances, les services Web et les API REST doivent traiter un nombre élevé de demandes plus petites. Cela signifie que la surcharge d'un ORM complet n'est pas plus acceptable.

Cela signifie que les modèles et les techniques comme l'enregistrement actif, la transaction par demande, etc. sont devenus un débit et une évolutivité éliminant les anti-modèles.

Une des fonctionnalités les plus importantes de nos jours est l'exécution asynchrone, pour réduire les pertes de threads et de CPU dues aux attentes. NHibernate n'a jamais effectué cette transition.

Réponse originale

Définir "le meilleur": est-ce le plus mature, celui qui a le plus de documentation, une communauté plus grande, plus mainstream?

NHibernate est plus mature, riche en fonctionnalités, avec une communauté plus avancée et ne sera probablement pas interrompue lorsque MS décidera de rompre à nouveau la compatibilité. Entity Framework est plus courant et est pris en charge immédiatement. Vous trouverez plus de livres pour débutants pour EF, des livres plus avancés pour NH.

Une bonne option serait d'essayer l'un des ORM les plus simples comme Subsonique et passer à des ORM plus avancés une fois que vous aurez compris comment fonctionnent les ORM, quels sont les différents pièges, quels SELECT N+1 signifie [: P]

N'essayez pas de créer votre propre ORM, il y en a déjà plusieurs dizaines! Subsonique, Castle ActiveRecord , NH, EF (bien sûr), LLBLGenPro ...

64
Panagiotis Kanavos

Si vous pouvez dépenser de l'argent, jetez un œil à LLBLGEn Pro 3.

  • prise en charge complète de .NET 4.0 et c'est un produit mature. Bon support c'est aussi utile.
  • large prise en charge des bases de données (Oracle, MS SQL, Firebird, MySql, PostgreSQL, Sysbase)
  • Beau concepteur, premier support de modèle et également premier support de base de données

Si votre budget est limité, essayez NHibernate. C'est aussi un produit mature, mais il a une plus grande courbe d'apprentissage. Et si vous avez besoin d'aide, vous pouvez toujours appeler Ayende :-)

Pour les petits projets, c'est EF 4.0 un bon choix.

13
Martin Fabik

Appeler un ORM le meilleur parmi tous dans une perspective générale est complètement impossible. Chacun d'entre eux est préférable sous différents angles. Vous avez choisi celui qui correspond le mieux à vos besoins. Linq2Sql a été écrit en pensant aux performances mais il manque de support pour les autres fournisseurs, Linq2Sql est très rapide. Pourtant, il y en a d'autres qui ne sont peut-être pas aussi rapides que Linq2Sql quand il s'agit de traiter avec SQL Server, mais ils prennent en charge une grande variété de fournisseurs. La meilleure idée serait de répertorier les fonctionnalités que vous souhaitez qu'un ORM ait pour votre projet et de sélectionner celle qui répond à tous vos besoins. "Vous pouvez poser ces questions pour choisir le bon ORM pour votre projet.

  • Que fournisseurs de bases de données voulez-vous que l'ORM prenne en charge? SQL Server, MySQL, Oracle, etc.
  • Avez-vous besoin de model-first ou db-first support?
  • Quels sont mes critères de performance [mémoire, traitement]?
  • Allez-vous l'utiliser dans application Web ou application de burea?
  • Avez-vous clients distribués dans votre application?
  • Et la liste continue..
8

La plupart des ORM ont leurs propres forces et faiblesses.

Entity Framework, par exemple, a l'avantage (énorme?) D'être dans le cadre lui-même, mais il est également assez lourd et un peu plus difficile à mettre en place (courbe d'apprentissage plus raide).

Il existe des ORM commerciaux très agréables et très faciles à utiliser. J'utilise actuellement Lightspeed dans un projet C # 4, et j'en suis extrêmement satisfait pour ce scénario spécifique.

Cela dépend vraiment de ce dont vous avez besoin de l'ORM. Si vous voulez une configuration et une utilisation très rapides et faciles, Lightspeed, subsonic et autres sont très agréables. Si vous avez besoin de fonctionnalités complètes, Entity Framework et NHibernate sont de bonnes options.

8
Reed Copsey

J'utilise Linq-to-SQL comme mon ORM principal lors de la création d'applications C #. Je vais finalement passer à Entity Framework, mais pour l'instant celui-ci est vraiment facile à utiliser et rapide.

2
Sergio Tapia

Je serais d'accord avec @this. __curious_geek que le choix du bon ORM dépendrait de vos besoins. Ayant travaillé sur Hibernate et Entity Framework, je pense que ce dernier est plus convivial car il s'agit d'un éditeur basé sur l'interface graphique. Sur le front de la richesse des fonctionnalités, NHibernate a l'avantage de prendre en charge de nombreux fournisseurs de bases de données. La personnalisation de NHibernate s'est également avérée beaucoup plus facile que de peaufiner Entity Framework.

En supposant que la plupart des outils satisfont à votre exigence principale, je préférerais NHibernate car une communauté d'utilisateurs dynamique et engageante est un gros plus pour tout outil.

1
Bharath K