Comment verrouiller sur un entier en C#?

Est-il possible de se verrouiller sur un entier en C#? Les nombres entiers peuvent pas être utilisés avec serrure parce qu'ils sont en boîte (et de verrouillage verrouille uniquement sur les références).

Le scénario est le suivant: j'ai un forum de site web avec une modération de la fonctionnalité. Ce que je veux faire est de vous assurer que pas plus d'un modérateur peut modérer un post à un moment donné. Pour atteindre cet objectif, je veux verrouiller sur l'ID du post.

J'ai eu un couple d'idées jusqu'à présent (par ex. à l'aide d'un dictionnaire<int, object>), mais je suis à la recherche d'un mieux et de manière plus propre.

Des suggestions?

  • hmm, peut-être vous pouvez créer une liste des postes actuellement en cours de modification et de vérifier?
  • Qu'est-ce que la serrure? Si les modifications se produisent l'un après l'autre (ce qui est un verrou serait la cause), vous vous ne gagnez rien. Tous les DB mises à jour sont implicitement transactionnelle, ce qui signifie qu'ils se produisent l'un après l'autre et ne se mélangent pas.
  • c'est un peu compliqué à expliquer mais en bref après le verrouillage, - je mettre à jour plusieurs bases de données (peut-être en cours d'exécution sur plusieurs serveurs de DB), par exemple, supprimer le post (dans une base de données), mise à jour de la modération de la base de données (si l'élément a été signalé .. etc), même dans la modération de la base de données, j'ai supprimer des enregistrements dans les tables et les insérer des enregistrements dans d'autres tables, ce qui pourrait causer une autre demande d'essayer de faire la même chose pour lancer une exception, il a tout pour être fait à la fois et les autres demandes doivent attendre
  • Effectivement, c'est ce que je voulais dire quand j'ai mentionné à l'aide d'un dictionnaire, mais je crois que cela peut dégénérer très facilement
  • Vous utilisez le mauvais outil pour le Travail, si vous voulez arrêter quelqu'un de la modification d'un enregistrement avec un Id particulier vous avez besoin de garder une liste de personnes interdites ID quelque part. vous ne pouvez pas verrouiller le nombre 1672 et empêcher toute autre personne de l'utiliser c'est juste de la folie. Cependant, vous pouvez vérifier pour voir si l'enregistrement 1672 a été verrouillé par un autre utilisateur et attendre jusqu'à ce que ce soit fait, ou feed-back que l'opération coudn'pas être réalisée car la somone d'autre a un verrou sur l'enregistrement.
  • En fait, je ne m'inquiète pas si l'utilisateur modifie le post ou pas, il sera supprimé par le modérateur, ce que j'essaie de faire est de vous assurer que seul un modérateur peut supprimer un poste à la fois (ce qui implique des mises à jour des autres tables comme je l'ai expliqué dans le commentaire ci-dessus)
  • Il semble que vous devez utiliser une transaction distribuée. Si vos bases de données, de les soutenir, il fonctionnera beaucoup mieux que d'essayer de mettre en œuvre un verrou dans la logique de l'application.

InformationsquelleAutor Waleed Eissa | 2009-04-23