2014年7月11日金曜日

Dapper で例外 "シーケンスに要素が含まれていません" が起きる

Dapper を使っていたらハマったので。(Dapper っていうより LINQ ?)

現象

以下のように Dapper で Single/First メソッドを使うと例外が起きることがあるようです。

var user = connection.Query<User>("select * from Users where UserName = @userName", new { userName = "hoge" }).Single();
System.InvalidOperationException: シーケンスに要素が含まれていません

クエリの結果が必ず1件あるにも関わらず、起きることがあります。また、常になるというわけではありませんでした。(環境にもよる...?)
私が遭遇したケースでは、数十回から数百回に一度程度再現しました。

解決策

原因と理由はよくわかりませんが SingleOrDefault/FirstOrDefault に変更すると発生しなくなります。

var user = connection.Query<User>("select * from Users where UserName = @userName", new { userName = "hoge" }).SingleOrDefault();

参考

0 件のコメント:

コメントを投稿

TFT 10.14 Peeba Comp

こちらのガイドの自分用まとめです。 https://www.reddit.com/r/CompetitiveTFT/comments/hraunp/tft_1014_break_the_meta_new_peeba_comp_set_35/ 難しいですが完成すると非常に強く、プレ...