장기 실행 쿼리 취소

c# dapper

문제

우리는 데이터베이스 읽기를 위해 Dapper를 사용하는 winforms 응용 프로그램을 가지고 있습니다.

한 가지 형태로 우리는 백그라운드 스레드에서 (가능한) 장기 실행 쿼리를가집니다.

사용자는 쿼리를 취소 할 수 있기를 원하므로 DbCommand Dapper에 대한 액세스 권한이 필요합니다. DbCommand Dapper가 실행중인 경우 다른 스레드에서 취소를 호출하고 호출합니다.

Dapper에서이 DbCommand를 노출하는 가장 좋은 방법은 무엇입니까?

인기 답변

망치질 시간이야. 물건을 부숴 라.

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

.... 취소하려면 지금

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는 합법적입니까? 예, 이유를 알아보십시오.