J'ai un ancien système qui utilise le XML pour son stockage de données. Je vais utiliser les données pour un autre mini-projet et je voulais utiliser LINQ to XML pour interroger/mettre à jour les données; mais il ya 2 scénarios que je ne suis pas sûr si j'ai besoin de me gérer ou non:Mises à jour de LINQ vers XML: comment gère-t-il plusieurs lecteurs/graveurs simultanés?
1- Si j'ai quelque chose de semblable au code suivant, et 2 personnes arrivent à frapper le Save() en même temps? Est-ce que LINQ to XML attend jusqu'à ce que le fichier soit à nouveau disponible avant de l'enregistrer, ou va-t-il simplement le lancer? Je ne veux pas mettre des verrous à moins que je dois :)
// I assume the next line doesn't lock the file
XElement doc = XElement.Load("Books.xml");
XElement newBook = new XElement("Book",
new XAttribute("publisher", "My Publisher"),
new XElement("author", "Me")));
doc.Add(newBook);
// What happens if two people try this at the same time?
doc.Save("Books.xml");
2- Si je charge() un document, ajoutez une entrée sous un nœud particulier, puis cliquez sur Enregistrer(); Que se passe-t-il si un autre utilisateur a déjà ajouté une valeur sous ce nœud (depuis que j'ai frappé mon Load()) ou pire, supprimé le nœud? Il est évident que je peux contourner ces problèmes, mais je n'ai pas trouvé de documentation qui pourrait me dire si je dois ou non, et le premier serait au moins un peu un cochon pour tester de manière fiable.
Merci pour la réponse. Je dirais que c'était un problème LINQ to XML comme les autres fois que j'utilise LINQ la base de données backend prend soin de telles choses .. J'étais juste curieux de savoir s'il y avait de la "magie" dans LINQ to XML ou pas. –
@Steve: Pas du tout. Il s'agit vraiment de la concurrence au fichier (je suppose que c'est la ressource partagée). LINQ to XML ne fait rien de spécial pour vous dans ce cas. – casperOne