Dapper에서 QueryAsync를 호출하면 InvalidOperationException이 throw됩니다.

asp.net-web-api async-await dapper

문제

나는 비싸지지 않는 지원을 시도하고 있었고 간단한 사용 사례를 실행할 때 다음 문제에 부딪쳤다. ApiController를 사용하여 dapper를 사용하여 로그 항목을 트리거하여 데이터베이스에 생성합니다. 내 DB를 연결 괜찮습니다. dapper에서 Query 확장 메소드를 사용하여 동기 버전을 실행하면 모든 것이 잘 동작합니다. async / await 구문과 함께 QueryAsync를 사용하면 InvalidOperationException이 발생합니다. 코드는 다음과 같습니다.

public class BackgroundController : ApiController
{
    [HttpGet]
    public async Task<HttpResponseMessage> Run(string op)
    {
        using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Backgrounder"].ConnectionString))
        {
            const string sql =
                "Insert Into SimpleLog (message, threadid, created) Values(@message, @threadid, @created); " +
                "SELECT CAST(SCOPE_IDENTITY() as int)";
            var results = await (connection.QueryAsync<int>(sql, new { message = "new log record", threadid = "1", created = DateTime.Now }));
            var id = results.SingleOrDefault();
            Debug.WriteLine("inserted log record id: " + id);
        }
        return this.Request.CreateResponse(HttpStatusCode.OK);
    }
}

또한 stacktrace의 모양은 다음과 같습니다.

1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask System.Data.SqlClient.SqlCommand.b_24 (작업 1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask ()의 2.InnerInvoke () --- 이전의 스택 추적 끝 예외가 Throw 된 위치 --- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업) at System .Runtime.CompilerServices.TaskAwaiter.ValidateEnd (Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at Dapper.SqlMapper.<QueryAsync>d__69 c : \ Dev \ Dapper \ Dapper의 1.MoveNext () NET45 \ SqlMapperAsync.cs : line 21 --- 예외가 throw 된 이전 위치의 스택 추적 끝 --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () System.Runtime.CompilerServices.TaskAwaiter. HandleNonSuccessAndDebuggerNotification (작업 작업) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (작업 작업) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult () at WebApiBackgrounder.Controllers.BackgroundController.d _0.MoveNext ()

그것은 dapper가 ExecuteReaderAsync를 호출 할 때 실패한 것 같습니다. 이 문제를 어떻게 해결할 수 있습니까?

편집하다

다음은 연결 문자열입니다.

 <add name="Backgrounder" providerName="System.Data.SqlClient" connectionString="Data Source=LPW7X6530;Initial Catalog=Sandbox;Integrated Security=SSPI;" />

수락 된 답변

오류 메시지를 기반으로 연결이 열려 있지 않은 것처럼 들립니다. 그것이 일어날 때, 대담한 사람은 보통 당신을 위해 이것을하려고 시도합니다. 그래서 당신이 Open ()을 먼저 호출하지 않았다는 것은 무리가 아닙니다. 나는 우리가 그것을 놓쳤을 것이라고 생각합니다. 지금 : 연결에서 Open ()을 호출하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow