Cancelar Dapper Query de larga ejecución

c# dapper

Pregunta

Tenemos una aplicación de winforms que utiliza Dapper para lecturas de base de datos.

En una forma, tenemos una consulta (posible) de ejecución larga en una cadena de fondo.

Los usuarios quieren poder cancelar la consulta, por lo que necesito acceder a DbCommand Dapper para crear y llamar a Cancelar en él, si se está ejecutando, desde otro hilo.

¿Cuál sería la mejor manera de exponer este DbCommand de Dapper?

Respuesta popular

Es hora del martillo. Romper cosas.

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

.... ahora para cancelar

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow