我们有一个winforms应用程序,它使用Dapper进行数据库读取。
在一种形式中,我们在后台线程上有一个(可能的)长时间运行的查询。
用户希望能够取消查询,因此我需要访问DbCommand Dapper创建并在其上调用Cancel(如果它正在运行),来自另一个线程。
从Dapper暴露这个DbCommand的最佳方法是什么?
答案 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();
}
}