Отменить длительный Dapper Query - PullRequest
3 голосов
/ 02 марта 2012

У нас есть приложение winforms, которое использует Dapper для чтения из базы данных.

В одной форме у нас есть (возможно) длительный запрос в фоновом потоке.

Пользователи хотят иметь возможность отменить запрос, поэтому мне нужен доступ к DbCommand, который создает Dapper, и вызывает Cancel, если он запущен, из другого потока.

Как лучше всего разоблачить эту команду DbCom от Dapper?

1 Ответ

0 голосов
/ 25 февраля 2015

Время молотка. Перерыв вещи.

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

.... сейчас отменить

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