Vor RAD Studio 10.4 wurde die Standardoption der Transaktionsisolation für FireDAc-Verbindungen als Festschreibung gelesen. Das heißt, TFDConnection.TxOptions.Isolation wurde xiReadCommitted. Dies war der für die Komponente festgelegte Wert, und da dies der Standard war, wurde er nicht an die Datenbank gesendet. FireDAC ging einfach davon aus, dass der Standardwert in seiner Konfiguration der Standardwert der Datenbank war, und es hat diese Isolationskonfiguration nicht explizit zu Beginn einer Sitzung an die Datenbank gesendet. Zum Beispiel ist in MySQL der erforderliche Befehl SET SESSION TRANSACTION ISOLATION LEVEL wurde nicht ausgeführt, wenn der Standardwert nicht geändert wurde. In diesem Fall blieb die MySQL-Transaktionsisolation auf dem Standardwert der Datenbank, d.h. xiRepeatableRead, unabhängig davon, was in der FireDAC-Standardkonfiguration eingestellt war.
Um dieses Problem zu beheben, haben wir beschlossen, dass es besser ist, den voreingestellten Isolation-Level auf xiUnspecified zu belassen, was bedeutet, dass, wenn Sie keinen spezifischen Isolation-Level benötigen, die Standardkonfiguration für die spezifische Datenbank verwendet wird – dies ist diejenige, die bereits in der Datenbank voreingestellt ist, und Sie brauchen nicht nach der Konfiguration zu fragen. Die Standardisolationsebene ist für eine bestimmte Datenbank optimiert, da die Standardeinstellungen unterschiedlich sind und einige der Isolationsebenen nicht einmal von allen Datenbank-Engines gleich gut unterstützt werden.
Wenn ein Entwickler eine andere Isolationsebene als die von der Datenbank verwendete Standardeinstellung verwenden möchte, muss diese explizit in der Komponentenkonfiguration oder im Code eingestellt werden. Wenn der Entwickler die Standardvorgabe der Datenbank verwenden möchte, ist kein Code erforderlich.
Hier sind die Standardisolationsebenen der Hauptdatenbanken in FireDAC-Begriffen – auch hier ist der Eigenschaftswert nur xiUnspecified:
DB2 – xiReadCommitted
InterBase und Firebird – xiSnapshot
MySQL und MariaDB – xiRepeatableRead
Oracle – xiReadCommitted
Microsoft SQL Server – xiReadCommitted
SQLite – xiSerialisierbar
PostgreSQL – xiReadCommitted
Ich hoffe, dass dies dazu beiträgt, die Änderung zu verdeutlichen und zu erklären, wie sie umgangen werden kann, indem die Transaktionsisolationsebene Ihrer FireDAC-Verbindung auf diejenige geändert wird, die Sie speziell benötigen, falls sie sich von der Standardeinstellung der Datenbank unterscheidet. Diese Änderung wurde in den Versionshinweisen für RAD Studio 10.4 nicht aufgeführt und hat einige Bedenken (und Fehlerberichte) hervorgerufen.