Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie funktioniert die Versionierung in Nhibernate?

Nein. Sperren werden nur für den Umfang einer Transaktion gesetzt, die in einer Webanwendung endet, wenn die Anfrage endet. Außerdem ist der Standardtyp des Transaktionsisolationsmodus Lesen festgeschrieben was bedeutet, dass Lesesperren freigegeben werden, sobald die select-Anweisung beendet wird. Wenn Sie in derselben Anforderung und Transaktion lesen und Änderungen vornehmen, können Sie eine Lese- und Schreibsperre für die betreffende Zeile setzen, die andere Transaktionen daran hindern würde, in diese Zeile zu schreiben oder daraus zu lesen. Diese Art der Parallelitätssteuerung funktioniert jedoch nicht gut in einer Webanwendung.

Dies würde passieren, wenn [optimistische Parallelität] verwendet würde. In NHibernate funktioniert optimistische Parallelität durch Hinzufügen eines Versionsfeld . Speicher-/Aktualisierungsbefehle werden mit der Version ausgegeben, auf der die Aktualisierung basierte. Wenn diese von der Version in der Datenbanktabelle abweicht, werden keine Zeilen aktualisiert und NHibernate wirft.

Nein, die Sperre wird am Ende der Anfrage aufgehoben.

Insgesamt ist es am besten, sich für optimistische Parallelität mit Versionsfeldern zu entscheiden, die von NHibernate verwaltet werden.