Ich verwende Dapper mit meiner SQLite-Datenbank. Ich habe einen Multithread-Code entwickelt, bei dem jeder Thread einige Lese- und Schreibvorgänge mit Dapper ORM ausführt. Möglicherweise versucht der Thread beide gleichzeitig, in dieselbe Tabelle zu schreiben.
Die Verwirrung, der ich gegenüberstehe, ist, dass ich eine Technik in meinem Code implementieren muss, um den Thread für gleichzeitige Lesevorgänge sicher zu machen, oder dass do dapper das für mich erledigt.
Beachten Sie, dass SQLite die Datenbankdatei zum Schreiben sperrt. Mein einziges Anliegen hier ist Dapper und die Funktionsweise in einem solchen Szenario.
Wie Sie sagten, implementiert SQLite das Sperren auf DB-Dateiebene.
Dapper oder ein anderes Voll- oder Mikro-ORM kann diese Tatsache nicht ändern. Kein ORM implementiert Thread-Management oder Parallelität für RDBMS. Die Threadverwaltung liegt in der Verantwortung des Benutzers.
Denken Sie anders. Wie kann ORM Threading implementieren?
Ja; Einige ORMs verwalten Verbindungen bis zu einer bestimmten Ebene. Meistens beschränkt es sich jedoch nur auf das Erstellen / Öffnen / Entsorgen. ORMs steuern weder Threading noch Parallelität. Es muss vom Benutzer implementiert werden.
Antwort auf Ihren Kommentar:
Dennoch bleibt die Frage, was dapper in solchen Fällen tut, da es möglicherweise eine Art Wiederholungslogik gibt, um zu versuchen, die Abfrage erneut auszuführen, falls die Sperre vorhanden ist
Dapper macht so etwas nicht. Dapper funktioniert genau (na ja ... fast) wie ADO.NET. Für jeden abfragenden Teil unterscheidet sich Dapper funktional kaum von ADO.NET.
Um auf Ihren Kommentar zu antworten: Wenn ein Anbieter von ADO.NET eine Wiederholungslogik implementiert, wird diese automatisch von Dapper übernommen. Dapper selbst implementiert jedoch keine solche Logik.
Wenn ich richtig denke, wird ADO.NET die richtige Ausnahme auslösen - Dapper wird diese Ausnahme einfach an Sie weiterleiten.
Ich hoffe, diese Antwort wird Ihnen helfen.