Wie verwaltet SqlConnection IsolationLevel?
DiesMSDN article besagt, dass
Eine Isolationsstufe hat einen verbindungsweiten Gültigkeitsbereich. Sobald sie für eine Verbindung mit der Anweisung SET TRANSACTION ISOLATION LEVEL festgelegt wurde, bleibt sie wirksam, bis die Verbindung geschlossen oder eine andere Isolationsstufe festgelegt wird. Wenn eine Verbindung geschlossen und an den Pool zurückgegeben wird, bleibt die Isolationsstufe der letzten Anweisung SET TRANSACTION ISOLATION LEVEL erhalten. Nachfolgende Verbindungen, die eine Poolverbindung wiederverwenden, verwenden die Isolationsstufe, die zum Zeitpunkt des Pools der Verbindung gültig war.
Das SqlConnection class hat kein Mitglied, das die Isolationsstufe halten kann. Woher weiß eine Verbindung, in welcher Isolationsstufe sie ausgeführt werden sol
Der Grund, warum ich das frage, ist das folgende Szenario:
Ich habe eine Transaktion mit TransactionScope im serialisierbaren Modus geöffnet, z. B. "T1".Eröffnete eine Verbindung für T1. T1 ist beendet / entsorgt, die Verbindung geht zurück zum Verbindungspool.Rief eine andere Abfrage auf derselben Verbindung an (nachdem sie vom Verbindungspool abgerufen wurde) und diese Abfrage wird im serialisierbaren Modus ausgeführt !!!Problem
Wie weiß die Poolverbindung noch, welche Isolationsstufe damit verbunden war ???Wie kann ich es auf eine andere Transaktionsebene zurücksetzen ???Auflösung
Der Grund, warum gepoolte Verbindungen die serialisierbare Isolationsstufe zurückgeben, ist folgender:
Hope das klärt ein paar Zweifel. :)