Annuler la requête longue Dapper

c# dapper

Question

Nous avons une application winforms qui utilise Dapper pour les lectures de bases de données.

Sous une forme, nous avons une requête longue (possible) sur un thread d'arrière-plan.

Les utilisateurs veulent pouvoir annuler la requête, donc j'ai besoin d'accéder à DbCommand Dapper crée et d'appeler Cancel, s'il est en cours d'exécution, à partir d'un autre thread.

Quelle serait la meilleure façon d'exposer cette commande DbCommand de Dapper?

Réponse populaire

C'est l'heure du marteau. Casser des choses.

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

.... maintenant pour annuler

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi