2010-07-14 3 views
0

J'écris actuellement un service Web WCF qui utilise LINQ to SQL pour récupérer du travail avec une base de données SQL.Gestion de la simultanéité avec LINQ

J'ai une table Users qui avait un nombre entier qui stocke combien de demandes au service l'utilisateur a fait. Au cours des tests, j'obtiens des problèmes de simultanéité mettant à jour l'entier si cela est fait en même temps.

Quelle serait la meilleure façon de gérer cela? Si LINQ détecte un conflit, récupérez le compteur d'utilisation et réessayez jusqu'à ce qu'il change?

Des idées seraient utiles.

Répondre

0

Ne pas mettre à jour le compteur du client (dans le processus WCF), mais plutôt le mettre à jour sur le serveur:

UPDATE Users 
SET Counter = Counter + 1 
WHERE UserId = @userID; 

De cette façon, vous ne se soucient pas d'autres appels concurent, parce que chaque appel correctement incrémente le compteur avec 1. Le problème est que LINQ ne peut pas faire cela, mais finalement vous devez utiliser le bon outil pour le bon travail (dans ce cas, un SqlCommand droit).

1

Comment le nombre de requêtes doit-il être en temps réel?

Si cela ne doit pas nécessairement être en temps réel, vous pouvez peut-être séparer votre extraction de votre mise à jour. Récupérez les informations de l'utilisateur et déposez un message dans une file d'attente MSMQ ou un courtier de service et laissez un autre processus retirer les messages de la file d'attente et mettre à jour le nombre de requêtes de cette façon.

Espérons que cela aide.

+0

Merci pour la réponse - Je n'ai jamais pensé à une solution non-temps réel. Je préfère le temps réel mais votre idée est une bonne alternative. – Bram

+0

Je suis heureux d'avoir pu aider. –

Questions connexes