Beenden Sie die langdauernde Dapper Query

c# dapper

Frage

Wir haben eine winforms-Anwendung, die Dapper für Datenbanklesevorgänge verwendet.

In einer Form haben wir eine (mögliche) lange laufende Abfrage auf einem Hintergrund-Thread.

Die Benutzer möchten in der Lage sein, die Abfrage abzubrechen, also brauche ich Zugriff auf den DbCommand-Dapper erstellt und cancel Cancel darauf, wenn es läuft, von einem anderen Thread.

Was wäre der beste Weg diesen DbCommand von Dapper auszusetzen?

Beliebte Antwort

Es ist Hammerzeit. Dinge zerstören.

using (var reader = connection.ExecuteReader(query)) {

.... jetzt zu stornieren

var wrappedReaderType = typeof (Dapper.CommandDefinition)
                        .Assembly.GetType("Dapper.WrappedReader");
var field = wrappedReaderType
            .GetField("cmd", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
    var command = field.GetValue(reader) as IDbCommand;
    if (command != null)
    {
        command.Cancel();
    }
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum