取消长时间运行的Dapper查询

时间:2012-03-02 10:41:05

标签: c# dapper

我们有一个winforms应用程序,它使用Dapper进行数据库读取。

在一种形式中,我们在后台线程上有一个(可能的)长时间运行的查询。

用户希望能够取消查询,因此我需要访问DbCommand Dapper创建并在其上调用Cancel(如果它正在运行),来自另一个线程。

从Dapper暴露这个DbCommand的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这是锤击时间。打破东西。

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