Question

Si le démarrage d'un nouveau projet que voulez-vous utiliser pour votre ORM NHibernate ou LINQ et pourquoi.Quels sont les avantages et les inconvénients de chacun.

edit:LINQ to SQL et pas seulement LINQ (merci @Jon Limjap)

Était-ce utile?

La solution

Je me suis posé une question très semblable, sauf qu'au lieu de NHibernate, je pensais à WilsonORM que j'ai envisager assez agréable.

Il me semble qu'il y a de nombreuses différences importantes.

LINQ:

  • n'est pas complète outil ORM (vous pouvez y arriver avec des bibliothèques supplémentaires comme la dernière Entity framework, personnellement, je considère l'architecture de cette dernière technologie de MS à environ 10 ans quand en comparaison avec d'autres frameworks ORM)
  • est surtout l'interrogation de "langue" appui à l'intellisense (compilateur de vérifier la syntaxe de votre requête)
  • est principalement utilisé avec Microsoft SQL Server
  • est closed source

NHibernate:

  • est outil ORM
  • a assez limité langage d'interrogation sans intellisense
  • peut être utilisé avec presque n'importe quel SGBD pour qui vous avez une base de données fournisseur
  • est open source

Ça dépend vraiment.Si vous développez un Riche (Windows) application de bureau où vous en avez besoin pour construire des objets, travailler avec eux et à la fin persistent leurs changements, alors je vous recommande d'ORM comme NHibernate.

Si vous développez une application Web qui habituellement seulement les données de la requête et de temps en temps seulement écrit des données dans la bd alors je vous recommande un bon langage d'interrogation comme Linq.

Donc, comme toujours, ça dépend.:-)

Autres conseils

Euh...il y a LINQ pour NHibernate.

Peut-être ce que tu veux dire, c'est pour l'utiliser:

  • LINQ to SQL
  • NHibernate

Je préfère NHibernate.

LINQ to SQL est assez léger, mais il est un peu plus étroitement couplé à la structure de données, par opposition à NHibernate, ce qui est assez flexible en termes de types de définitions d'objet qui peut être connecté à votre tableau de structures.

Bien sûr, cela ne veut pas dire que LINQ to SQL n'a pas utilise:ce site internet utilise.Je crois que c'est assez utile pour se lever et courir dans les petites applications où le schéma de base de données n'est pas aussi massive.

Commencez avec NHibernate est une mauvaise idée.Il démontre une bonne performance qu'avec bien des paramètres.Essayez d'utiliser EFv4 pour les grands projets et L2S (peut-être de la 3e partie des produits) pour les petites et moyennes taille.Ces produits sont plus pratique et plus souple que NHibernate et vous permettre de démarrer rapidement.

pas une liste complète

LinqToSQL Pro:

  • meilleur support de l'outil
  • bon fournisseur linq
  • facile à démarrer lors de la db-schema == classes -

Con:

  • non flexible (ie db-schéma != les classes)
  • seulement prend en charge MS SQL Server
  • pas de cascade (enregistrer, mettre à jour ...ne marche pas en cascade sur les objets référencés)

NHibernate Pro:

  • beaucoup sgbd pris en charge ootb
  • riche en fonctionnalités
  • très flexible pour presque tous les cas de coin
  • open source

Con:

  • pas si facile de commencer avec
  • pas de MS
  • il existe de nombreux outils, mais vous avez à la recherche pour

Entre les 2 Formulaires

je choisirais LinqToSql si:

  • db-schema == classes
  • ne jamais utiliser MS SQL Server
  • la boutique permet uniquement de MS-Produits

j'ai choisi de Nhibernate si:

  • plus riche objectmodel
  • héritage db-schéma
  • DB autres que MS SQL Server ou le soutien de plusieurs
  • critique pour les performances (je pense NH a plus de fonctionnalités pour optimiser les performances de LinqToSql)

NOTE:c'est mon point de vue personnel.J'ai la plupart du temps avec (fou) de l'héritage et de la dbs complexe ETL emplois où l'objet à l'aide du modèle beaucoup plus de SQL.

Je n'utilise pas (ou même de savoir) NHibernate, je veux juste donner mon témoignage:J'ai utiliser LINQ to SQL depuis environ 2 ans avec MySQL et PostgreSQL bases de données (à l'aide de DbLinq sur Windows, à l'aide Mono sur Linux et Mac OS X).

Donc, LINQ to SQL n'est PAS limitée aux produits Microsoft.

Je peux confirmer que LINQ to SQL est très bien adapté pour les petites et moyennes projets, ou de grands projets où vous avez le contrôle absolu de la structure de base de données.Comme les évaluations indiquent, LINQ to SQL a certaines limitations qui en font un outil inapproprié quand il n'y a pas de correspondance directe entre les tables de base de données et les classes d'entité.

Note :LINQ to SQL ne prend pas en charge plusieurs-à-plusieurs liens (mais cela peut être facilement réalisé avec quelques lignes de code).

Le principal inconvénient de NHibernate est l'incapacité de faire usage de les appels de méthode.Ils ne peuvent pas être traduite en SQL.Pour contourner cela, vous devez recréer des arbres d'expression qui est difficile à faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top