Annulla la query Dapper di lunga esecuzione

c# dapper

Domanda

Abbiamo un'applicazione winforms che usa Dapper per le letture del database.

In un modulo abbiamo una query (possibile) di lunga durata su un thread in background.

Gli utenti vogliono essere in grado di cancellare la query, quindi ho bisogno di accedere a DbCommand Dapper crea e chiama Annulla su di esso, se è in esecuzione, da un altro thread.

Quale sarebbe il modo migliore per esporre questo DbCommand di Dapper?

Risposta popolare

È tempo di martello. Rompere cose.

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

.... ora per cancellare

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();
    }
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché