2010-06-16 16 views
3

J'ai une application client qui se connecte à un serveur. Le serveur utilise la mise en veille prolongée pour la persistance et l'interrogation. Il dispose donc d'un ensemble d'objets Hibernate annotés pour la persistance.Création d'un fournisseur Linq-> HQL

Le client envoie des requêtes HQL au serveur et obtient des réponses. Le client possède un ensemble d'objets générés automatiquement qui correspondent aux objets Hibernate du serveur pour les résultats de la requête et la persistance de base.

Je voudrais prendre en charge l'utilisation de Linq pour interroger ainsi que Hql car il rend les requêtes typesafe et plus rapide à construire (plus de fautes de frappe dans les requêtes de chaîne HQL). J'ai regardé autour de moi mais je ne vois pas comment les adapter à ce que j'ai.

  • fournisseur Linq NHibernate - nécessite l'utilisation de NHibernate ISession et ISessionFactory, que je n'ai pas
  • LinqExtender - nécessite beaucoup d'annotations sur les objets et l'extension d'un type de base, trop invasive

Ce que je veux vraiment, c'est quelque chose qui va me donner une structure facile à traiter pour construire les requêtes HQL. J'ai lu la plupart d'un article de 15 pages écrit par l'un des développeurs C# sur la façon de créer des fournisseurs personnalisés et c'est assez compliqué, principalement en raison de la complexité de l'arbre d'expression. Est-ce que quelqu'un peut suggérer une approche pour implémenter la traduction Linq -> HQL? Peut-être une bibliothèque qui va nettoyer l'arbre d'expression en quelque chose de plus SQL/HQLish.

Je voudrais prendre en charge select/from/where/group by/order par/jointures. Pas trop inquiet à propos des sous-requêtes.

Répondre

1

J'ai donc trouvé cette bibliothèque re-linq qui est ce que NHibernate utilise pour implémenter sa fonctionnalité LINQ. Semble ranger beaucoup de bruit autour de l'expression, bien qu'il semble y avoir un peu à faire pour créer une implémentation.

re-linq

1

Je ne pense pas qu'il existe une bibliothèque qui fait cela. Vous pouvez écrire votre propre fournisseur. Il existe des boîtes à outils qui vous aident à écrire un tel fournisseur. Par exemple IQToolkit. Mais s'il vous plaît noter que l'écriture de votre propre fournisseur sera encore beaucoup de travail. Je ne suis pas sûr que cela vaille la peine d'être investi.