2012-03-02 2 views
3

우리는 Dapper를 데이터베이스 읽기에 사용하는 winforms 응용 프로그램이 있습니다.장기간 실행되는 Dapper 쿼리 취소

한 가지 형태로 우리는 배경 스레드에서 (가능한) 장기 실행 쿼리를 가지고 있습니다.

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

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

+0

이 현재 노출되지, 나는 짧은 광고하는 인터페이스에 전달에 추가의 * 쉽게 * 가지 방법을 생각할 수 없다 취소 할 수

using (var reader = connection.ExecuteReader(query)) { 

.... 이벤트 ... 나는이 특별한 예제가 표준이 아닌 예외라고 가정하고있다. 아마도이 코드를 수동으로 작성하십시오. –

+0

나는 마침내 설명서 datareader 물건을 제거했다는 것을 생각했다 ... 추측하지 말라. 하지만 여전히 나는 Dapper를 좋아합니다. – Rik

+0

만약 당신이 이것에 대한 특별한 생각을 가지고 있다면, 나는 모두 귀에 불과하지만 ... * 쉬운 길을 볼 수 없다. = –

답변

0

해머 시간입니다. 물건을 부숴 라. 지금

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(); 
    } 
} 
관련 문제