Question

Nous avons un projet dans lequel accéder à la couche de base de données (MS SQL) avec LINQ. Pouvons-nous maintenant changer notre couche de base de données en fichier XML et toujours y accéder avec le même LINQ?

Nous voulons ajouter la possibilité de stocker des données dans un seul fichier XML ou un ensemble de fichiers XML.

Le code LINQ to SQL actuel ressemble à:

result = (from e in db.Organizations
          where e.Id == idOrganization
          select e).SingleOrDefault();

ou

 result = (from e in db.Organizations
           where e.Name.Trim().ToUpper() == organizationName.Trim().ToUpper()
               && e.Id!=idCurrentOrganization
           select e).Count()>0;
Était-ce utile?

La solution

LINQ to SQL et LINQ to XML ont des similitudes, mais elles ne sont pas identiques. Les requêtes LINQ pourraient probablement être écrites de manière à pouvoir être utilisées de la même manière, mais le code des requêtes elles-mêmes devrait probablement être modifié.

Pouvez-vous donner quelques exemples de votre code LINQ to SQL actuel? Inclure des exemples du type de données que vous utilisez et de la façon dont vous voulez formater le XML aiderait probablement les gens ici à donner des pointeurs plus spécifiques.

Modifier: votre première requête apparaît pour renvoyer un objet. Si votre LINQ to SQL et votre LINQ to XML renvoient tous deux le même type, vous pouvez les échanger sans modifier le code qui consomme le résultat.

Votre deuxième requête semble renvoyer une valeur booléenne. Le même concept s’applique donc à celle-là. Le code situé ailleurs dans votre solution ne tiendra pas compte de la configuration de ce booléen.

La suggestion de Mike d'utiliser une interface pour votre couche d'accès aux données est la voie à suivre. Pour vos 2 exemples, vous auriez une interface qui contiendrait un objet Organization et un bool. Vos implémentations SQL et XML seraient différentes, mais toute autre partie de votre code n'aurait besoin que de savoir comment utiliser l'interface.

Autres conseils

Il y a une étape supplémentaire que vous devrez faire: vous devrez charger le XML dans un XDocument (ou un XNode si je me souviens bien) avant de pouvoir interroger vos données.

Ensuite, il suffit simplement de sélectionner des nœuds dans une arborescence avec la syntaxe LINQ to XML.

Malheureusement, il n’existe pas de syntaxe LINQ permettant d’interroger les deux et de brancher le XML ou la base de données de manière transparente.

PS. Faites attention à l'espace de noms XML lorsque vous sélectionnerez des nœuds, cela pourrait être un casse-tête!

PS2. Désolé, je n'ai pas le code à portée de main

PS3. Je suggérerais que votre couche base de données dérive d’une interface, de cette façon vous serez capable de passer facilement de XML à DB et vice-versa

J'espère que cela vous aidera

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