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

参考

Factorio: Space Exploration クリア記録

 工場建設クラフトゲーム、Factorio の MOD である Space Exploration のクリア記録です。 はじめに プレイ時間は約 350 時間、2023年10月から2025年2月にかけて15ヶ月間に及びました。この期間中3人の友人と毎週末、工場勤務に明け暮れました...