DapperでQueryAsyncを呼び出すと、InvalidOperationExceptionがスローされます。

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()---以前のスタックトレースの終了例外がスローされた場所--- 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 ---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)at System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(タスクタスク)System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(タスクタスク)System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()WebApiBackgrounder.Controllers.BackgroundController.d _0.MoveNext()

dapperがExecuteReaderAsyncを呼び出すと失敗するようです。これに対処する方法は誰ですか?

EDIT

ここに接続文字列があります

 <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