2009-07-13 11 views
1

SQL Server unterstützt nicht die "SELECT FOR UPDATE" -Syntax, die von NHibernate für pessimistisches Sperren verwendet wird. Ich lese here on StackOverflow Beschreibungen anderer Alternativen (Ich mochte das "SELECT MIT (...)", weil es ganz in der Nähe ist).pessimistische Sperrung in SQL Server 2008 mit NHibernate

jedoch scheint NHibernate diese Syntax nicht zu unterstützen.

haben Sie einen Workaround dafür? Ich glaube, dass dies durch Basteln mit NHibernate Interna erreicht werden kann, aber das ist im Moment nicht kostengünstig für mich (Lernkurve). Ich könnte auch eine gespeicherte Prozedur mit Anwendungssperren verwenden und auf diese von NHibernate zugreifen. andere Vorschläge? (abgesehen von immer vor dem Schreiben lesen ...)

+2

Ist das nicht pessimistische Sperren? Optimistisches Sperren ist, wenn Sie * nicht * im Voraus sperren, in der Hoffnung, dass sich die Zeile nicht ändert, und Sie auf Änderungen im Update testen. –

+0

natürlich, Sie haben Recht. Danke, Bearbeitung. –

Antwort

2

NHibernate hat eine Versionsstrategie für das optimistische Sperren:

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

+0

Danke, Ayendes Blog ist großartig und obwohl ich fälschlicherweise nach optimistischen Sperren gefragt habe (obwohl ich pessimistische Sperre brauche), hat dieser Beitrag mir geholfen - seit es demonstriert, wie eine Sitzung.Get (1, LockMode.Upgrade); übersetzt in ... FROM ... WITH (updlock, rowlock) - was bedeutet, dass NHibernate (mindestens 2.x) die pessimistische Sperrsyntax von SQL Server unterstützt. –

0

Ich weiß nicht viel über NHibernate, aber in SQL-Spalten des ROWVERSION-Typs werden häufig verwendet, um optimistisches Sperren zu implementieren. Beispiel here