2010-07-09 4 views
1

Je développe trois applications qui partagent toutes une base de données commune. Je me suis heurté à de nombreux problèmes de concurrence et je me demandais s'il était possible d'empêcher toute autre requête de s'exécuter lorsque certaines requêtes sont en cours d'exécution (en d'autres termes, verrouiller la base de données pour éviter les problèmes de concurrence).LINQ et la concurrence Question

Edit: J'utilise LINQ to SQL

+0

Quelle base de données utilisez-vous, et quels problèmes spécifiques rencontrent des concurrency vous? La plupart des bases de données sont extrêmement efficaces dans la gestion des accès simultanés. – LukeH

+0

Quelle base de données utilisez-vous? MySQL, PostGres, un tableau en mémoire? Il devrait y avoir une sorte de verrouillage disponible en fonction de ce que c'est, mais nous ne pouvons pas répondre à moins de savoir avec quoi vous travaillez. –

+0

J'utilise SQL. Le problème spécifique que j'ai est quand deux utilisateurs exécutent une commande de mise à jour en même temps. Certaines lignes peuvent être affectées par une requête, tandis que d'autres sont affectées par une autre. – sooprise

Répondre

2

Vous pouvez toujours use TransactionScope together with the appropriate locking hints pour verrouiller les gens. Maintenant, la question est pourquoi vous voudriez faire cela ...

... une meilleure approche pourrait être de faire votre propre mécanisme de verrouillage, c'est-à-dire une table où vous pouvez insérer un drapeau qu'une certaine opération est en cours, puis d'autres vérifient cette table avant de faire quelque chose qui pourrait entrer en conflit avec cette opération. L'utilisation de verrous DB pour cela devrait être un dernier recours.

Voir:
http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/2d6fdb2e-e17e-4a4c-8da0-6968e60ef855
... et ...
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/1b20c00d-bb53-4057-a336-79d962eb463f