Ich versuche herauszufinden, ob wir ein Problem in unserer Anwendung mit Datenbankverbindungen haben, die inkorrekte Isolationsstufen verwenden. Unsere Anwendung ist eine .Net 3.5-Datenbank-App mit SQL Server 2005.
Ich habe festgestellt, dass das IsolationLevel von Verbindungen nicht zurückgesetzt wird, wenn sie an den Verbindungspool zurückgegeben werden (siehe hier ) und war auch wirklich überrascht, in diesem Blogbeitrag zu lesen, dass jedes neue erstellte TransactionScope einen eigenen Verbindungspool erhält zugewiesen zu ihm.
Unsere Datenbankaktualisierungen (über unsere Business-Objekte) finden innerhalb eines TransactionScope statt (für jede Business-Objekt-Grafikaktualisierung wird ein neues erstellt). Unsere Abrufe verwenden jedoch keine explizite Transaktion. Ich frage mich also, ob wir jemals in die Situation kommen könnten, in der unsere Fetch-Operationen (die den Standard IsolationLevel - Read Committed verwenden) eine Verbindung aus dem für eine Aktualisierung verwendeten Pool wiederverwenden und das Update IsolationLevel erben sollen (WiederholbareRead)? Oder würden unsere Updates garantiert einen anderen Verbindungspool verwenden, da sie in ein TransactionScope eingebettet sind?
Vielen Dank im Voraus,
Graham
Das ist beunruhigend!
Bill Vaughans Artikel, mit dem Sie verlinkt haben, besagt, dass ... jedes TransactionScope seinen eigenen Pool bekommt, aber der Code in dem Support-Artikel, mit dem Sie verlinkt sind, würde vermuten, dass dies nicht stimmt, da der zweite Durchlauf von NoTxScope()
den Verbindung vom Pool, der die erhöhte Isolationsebene verwendet hat.
Sie können das Problem durch [Ich zeichne den Code vom ersten Link]] erzwingen:
%Vor% oder indem Sie "..;Pooling=False"
zu Ihrer Verbindungszeichenfolge hinzufügen.
In SQL Server 2014 wird die Isolationsstufe für die Poolverbindung zurückgesetzt, wenn die Verbindung zum Pool wiederhergestellt wird. In früheren Versionen ist es nicht.
Sieh diesen Forenbeitrag:
Dies wurde wieder in das vorherige Verhalten in SQL 2014 CU6 und SQL 2014 SP1 CU1 mit diesem Fix geändert:
"Angenommen, Sie verwenden die TransactionScope-Klasse im clientseitigen SQL Server-Quellcode und öffnen die SQL Server-Verbindung nicht explizit in einer Transaktion. Wenn die SQL Server-Verbindung freigegeben wird, wird die Transaktionsisolationsstufe falsch zurückgesetzt. "
Tags und Links sql-server connection-pooling transactionscope .net-3.5 isolation-level