2009-07-13 7 views
1

SQL Server ne prend pas en charge la syntaxe "SELECT FOR UPDATE", utilisée par NHibernate pour le verrouillage pessimiste. J'ai lu here on StackOverflow descriptions d'autres alternatives (j'ai aimé le "SELECT WITH (...)" parce que c'est assez proche). Cependant, NHibernate ne semble pas supporter cette syntaxe.Verrouillage pessimiste dans SQL Server 2008 à l'aide de NHibernate

Avez-vous une solution de contournement pour cela? Je crois que cela peut être réalisé en bricolant avec les internes NHibernate, mais ce n'est pas rentable pour moi en ce moment (courbe d'apprentissage). Je pourrais aussi peut-être utiliser une procédure stockée avec des verrous d'application, et accéder à celle de NHibernate. d'autres suggestions? (à part de toujours lire avant d'écrire ...)

+2

est-ce pas le verrouillage pessimiste? Le verrouillage optimiste est lorsque vous * ne * verrouillez pas le front, en espérant que la ligne ne change pas, et vous testez les changements dans la mise à jour. –

+0

bien sûr, vous avez raison. merci, éditer. –

Répondre

2

NHibernate a une stratégie de version pour le verrouillage optimiste:

http://ayende.com/Blog/archive/2009/04/15/nhibernate-mapping-concurrency.aspx

+0

merci, le blog d'Ayende est génial et bien que j'ai demandé par erreur à propos du verrouillage optimiste (bien que j'ai besoin d'un verrou pessimiste), ce post m'a aidé - puisqu'il a démontré comment une session.Get (1, LockMode.Upgrade); traduit en ... FROM ... WITH (updlock, rowlock) - ce qui signifie que NHibernate (au moins 2.x) prend en charge la syntaxe de verrouillage pessimiste de SQL Server. –

0

Je ne sais pas grand-chose sur NHibernate, mais dans les colonnes SQL de type ROWVERSION, on utilise couramment le verrouillage optimiste. Exemple here

Questions connexes