取消长时间运行的Dapper查询

c# dapper

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

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

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

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

热门答案

这是锤击时间。弄坏东西。

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


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因