NHibernate: verrouillage exclusif

Dans NHibernate, je veux récupérer une instance, et de mettre un verrou exclusif sur l'enregistrement que représente l'extrait de l'entité sur la base de données.

Droit maintenant, j'ai ce code:

With.Transaction (session, IsolationLevel.Serializable, delegate
{
    ICriteria crit = session.CreateCriteria (typeof (TarificationProfile));

    crit.SetLockMode (LockMode.Upgrade);

    crit.Add (Expression.Eq ("Id", tarificationProfileId));

    TarificationProfile profile = crit.UniqueResult<TarificationProfile> ();

    nextNumber = profile.AttestCounter;

    profile.AttestCounter++;

    session.SaveOrUpdate (profile);
});

Comme vous pouvez le voir, j'ai mis le LockMode pour ce critère de "Mise à niveau".
Ces problèmes d'une instruction SQL pour SQL Server qui utilise le updlock et rowlock les indicateurs de verrouillage:

SELECT ... FROM MyTable with (updlock, rowlock)

Cependant, je veux être en mesure d'utiliser un véritable verrou exclusif. C'est, d'empêcher que d'autres peuvent lire ce même dossier, jusqu'à ce que j'ai publié la serrure.
En d'autres termes, je veux être en mesure d'utiliser un xlock indicateur de verrou, au lieu d'une updlock.

Je ne sais pas comment (ou même si) je peux le faire .... Peut-être que quelqu'un peut me donner quelques conseils à ce sujet 🙂

Si c'est vraiment nécessaire, je peux utiliser le SQLQuery fonctionnalité de NHibernate, et d'écrire ma propre Requête SQL, mais j'aimerais éviter autant que possible.

Pourquoi voulez-vous obtenir un verrou exclusif? Il y a probablement d'autres solutions.
Pourquoi ? Parce que c'est nécessaire ... Mon entité contient un compteur qui doit être utilisé, et je doit absolument être sûr que ce compteur est utilisé correctement...
Ne devriez-vous pas de verrouillage lors de la lecture?
Oui, je voudrais verrouiller lors de la lecture, mais c'est ce que je ne peux pas faire, ou au moins, NHibernate ne peut pas le faire. Je veux NHibernate pour émettre un select .. DE table avec des (xlock), mais il ne le fait pas.
Oui, c'est fait. Le RDMBS est SQL Server2005 sp3

OriginalL'auteur Frederik Gheysels | 2009-04-22