Je n’ai pas trouvé de comparaison claire de ce qui est pris en charge avec le fournisseur NHibernate 3.0 LINQ par rapport à la syntaxe QueryOver. De la surface, il semble que deux grands efforts se soient faits en deux choses très similaires.
Quels sont les principaux compromis à utiliser?
LINQ et QueryOver sont des méthodes de requête complètement différentes, ajoutées à celles qui existaient dans NHibernate 2 (critères, HQL, SQL)
QueryOver est une version fortement typée des critères et supporte principalement les mêmes constructions, spécifiques à NHibernate.
LINQ est une méthode de requête “standard”, ce qui signifie que le code client peut fonctionner sur IQueryable sans références explicites à NHibernate. Il prend en charge un ensemble différent de constructions; il serait difficile de dire s’il y en a plus ou moins qu’avec QueryOver.
Ma suggestion est d’apprendre toutes les méthodes de requête supscopes, chaque cas d’utilisation étant différent et certains fonctionnant mieux avec un autre, certains fonctionnant mieux avec d’autres.
J’ai utilisé à la fois les fournisseurs NH-Linq (l’ancien NHConsortingb pour la version 2.1, et le nouveau pour NH3.0) et j’ai également utilisé QueryOver. Avec toute l’expérience acquise lors du développement d’applications basées sur des données assez complexes, je vous suggère fortement de NE PAS utiliser le fournisseur de linq existant avec nHibernate si vous envisagez de ne faire que des opérations CRUD de base!
L’implémentation actuelle (linq) produit parfois du code SQL réellement illisible et inefficace. Si vous souhaitez optimiser les performances d’une firebase database, rejoindre rapidement certaines tables devient rapidement un cauchemar.
Malgré tous ces inconvénients, je n’ai jamais rencontré de questions erronées. Donc, si vous ne vous souciez pas des performances et que vous connaissez déjà LINQ, alors optez pour NH-Linq. Sinon, QueryOver est votre ami fiable et fiable.
LINQ to NHibernate (à partir de la version 3.0) ne prend pas en charge la propriété .HasValue sur les types Nullable. On doit comparer à null dans les requêtes.
J’ai commencé à utiliser NH-Linq, car je l’avais déjà fait avec LinqToSql et Entity Framework. Mais pour les requêtes plus complexes, j’ai toujours fini avec QueryOver. Les raisons: