取消長時間運行的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合法嗎? 是的,了解原因