2010-02-04 12 views
2

Ce que je voudrais faire:
1. Créez une requête LINQ arbitraire en fonction de critères sélectionnés par l'utilisateur qui
2. requête sur une collection proxy (façade) qui
3. Converti la requête NHibernate DetachedCriteria et sérialise ou juste sérialise l'expression LINQ puis
4. envoie la requête sérialisé au serveur via WCF, où
5. la mise en œuvre de service exécute la requête contre les procurations NHibernate, qui
6. Exécuter une requête SQL la base de données, qui
7. Renvoie le résultat de la requête, puis
8. NHibernate transforme les résultats en une collection de Poços qui
9. WCF sérialise puis
10. Revient à la collection proxy (façade), qui a finalement
11. renvoie les résultats au code client. Cela ressemble à un nombre fou d'étapes, mais le fait que le client parle au serveur uniquement via WCF est une exigence.Mieux vaut sérialiser les expressions NHibernate DetachedCriteria ou LINQ-à-NHibernate sur WCF?

Je suppose que la première partie de cette question est: «est-ce que je fais quelque chose de stupide qui peut être résolu plus facilement avec une architecture différente, en gardant à l'esprit que le client ne peut pas accéder directement à la base de données? La deuxième partie de la question est de savoir si je vais avoir moins de maux de tête en essayant de sérialiser les requêtes comme DetachedCriteria ou si je peux utiliser l'un des sérialiseurs d'arbre d'expression disponibles pour sérialiser les requêtes LINQ à NHibernate.

Je fais pas voulez composer HQL ou T-SQL dans le code.

+0

Y at-il une raison que vous ne pouvez pas passer les critères de la requête dans un dictionnaire de chaîne ou quelque chose à travers WCF beaucoup plus simple et puis construire contre la NHibernate Criteria API du côté serveur? Dans quelle mesure cette fonctionnalité de requête côté client doit-elle être flexible? –

+0

hors sujet, mais consultez les services WCF RIA – Neil

Répondre

0

Hey Jay, comment ça va! Eh bien, je pense que si WCF et une fonction de requête client dynamique sont des exigences fortes, que c'est un bon plan. L'expression sérialiseurs que vous avez mentionnée est certainement une pièce du casse-tête avec laquelle je resterais fidèle.

L'autre partie potentielle consiste à appliquer ces expressions à nhibernate. Je n'ai jamais utilisé nhibernate, mais si cela ressemble à un framework d'entité, cela posera un problème si vous composez une expression de requête avec des POCO qui n'ont pas été générés par le framework.

Il y a un nouveau projet open source qui vient d'être publié hier:
http://boostmap.codeplex.com/

L'une des caractéristiques de cette lib est un DataQueryProxy, qui vous permet de faire une IQueryable (.-À-dire votre poco), mais toutes les expressions sera envoyé par proxy à un IQueryable (c'est-à-dire votre type nHibernate).

Je ne sais pas si cela va vous aider, mais bonne chance :-)