1 votes

Filtrage XML et base de données à partir de Silverlight : Dynamic LINQ ? Existe-t-il un meilleur moyen ?

J'ai une application Silveright qui permet aux utilisateurs de spécifier des filtres sur quelques ensembles différents de données persistantes. Les données persistantes peuvent être XML ou une table de base de données relationnelle. J'utilise nHibernate pour la couche de base de données car je dois supporter différentes options de base de données, Postgresql et MySQL au minimum. Les champs de filtrage varient en fonction de l'ensemble de données interrogé.

Pour l'instant, le filtre est transmis du client Silverlight au serveur sous la forme d'une chaîne de caractères et j'utilise la balise LINQ dynamique sur le serveur pour le convertir en une requête LINQ. Cela fonctionne bien pour le cas XML où toutes les données ont été chargées en mémoire, mais je ne suis pas sûr que ce soit la meilleure approche pour la base de données.

Je me demande si la meilleure approche consiste à envoyer le filtre sous forme de chaîne de caractères à partir du client, puis à l'analyser avec la bibliothèque Dynamic LINQ. Pourrai-je utiliser les requêtes LINQ générées avec nHibernate ? Ou devrais-je envisager de sérialiser un objet Expression dans Silverlight et de le transmettre au serveur ? Ou existe-t-il un autre moyen ?

J'ai besoin que mes objets persistants fournissent une interface standard pour l'accès et il y en a un certain nombre. Il n'est donc pas possible de fournir une interface de méthode différente pour chaque filtre requis.

Vous trouverez ci-dessous un exemple de l'interface prise en charge par mes classes de persistance. La partie qui me pose problème est l'expression whereExpression.

public interface ICustomerPersistor
{
    Customer Add(Customer customer);
    Customer Update(Customer customer);
    Customer Delete(Customer customer);
    Customer Get(Guid customerId);
    int Count(string whereExpression);
    Customer Get(string username, string password);
    List<Customer> Get(string whereExpression, int offset, int count);
}

1voto

Marc Gravell Points 482669

Avez-vous envisagé les services de données ADO.NET ? Cela vous permet d'effectuer des requêtes LINQ sur une API REST (soutenue par WCF) - mais l'outillage fait tout le travail...

La plupart (mais pas tous) des filtres LINQ standard (etc.) sont pris en charge et peuvent être composés.

En particulier, pour interrogation de données, les services de données ADO.NET devraient convenir - pour mise à jour de vous devez effectuer un travail supplémentaire (ou utiliser une API distincte, non REST, pour les mises à jour). J'ai une série de articles sur mon blog couvrant ceci pour LINQ-to-SQL (le travail devrait être similaire pour les autres fournisseurs LINQ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X