Hi Ich bin mir ziemlich sicher, dass ich genau das gleiche Problem habe wie du. Ich öffne und schließe mehrere Sitzungen pro Integrationstest. Nachdem ich das SQLite Connection Pooling und einige eigene Experimente durchgegraben habe, bin ich zu folgendem Schluss gekommen:
Der SQLite-Pooling-Code speichert die Verbindung mit WeakReferences, was nicht die beste Option ist zum Zwischenspeichern, da der Verweis auf die Verbindung (en) gelöscht wird, wenn kein normaler (starker) Verweis auf die Verbindung vorhanden ist und der GC ausgeführt wird. Da Sie nicht vorhersagen können, wann der GC läuft, erklärt dies die "Zufälligkeit". Versuchen Sie, und fügen Sie ein GC.Collect();
zwischen einem Schließen und Öffnen einer anderen Sitzung, Ihre Prüfung wird immer fehlschlagen.
Meine Lösung bestand darin, die Verbindung zwischen den Eröffnungssitzungen wie folgt zwischenzuspeichern:
%Vor%Jeder meiner Integrationstests erbt von dieser Klasse und ruft OpenSession () auf, um eine Sitzung abzurufen. RecreateDB wird von NUnit vor jedem Test wegen des Attributs [SetUp] aufgerufen.
Ich hoffe, das hilft Ihnen oder anderen, die diesen Fehler bekommen.