長時間実行するDapperクエリをキャンセルする

c# dapper

質問

私たちはDapperをデータベースの読み込みに使うwinformsアプリケーションを持っています。

1つの形式では、バックグラウンドスレッドで長い実行クエリが(可能な)あります。

ユーザーはクエリをキャンセルできるようにしたいので、DbCommand Dapperにアクセスする必要があります.DbCommand Dapperは、実行中の場合は別のスレッドからCancelを作成して呼び出します。

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は合法ですか? はい、理由を学ぶ