0
0

【C#】【Dapper】Sequence contains no elementsにはまった話

Posted at

環境

C# 12.0
.NET 8.0.4
Dapper 2.1.35
Visual Studio 2022 (17.9.6)

ある日エラーが発生する

ある日を境にAPIが500 Internal Server Errorを返すようになりました。

出力されているエラーメッセージを見ると

sequence contains no elements

「シーケンスに要素が含まれていない」と怒られています。

原因は?

QueryFirst<T>

を使って1件だけ取得していた部分で

InvalidOperationException

上記の例外を送出していたことでした。

QueryFirst<T> の仕様を詳しく見てみると、

  1. 取得したデータが1件以上あるときは先頭のデータをT型にマッピングして返す
  2. データが0件の場合InvalidOperationException 例外を送出する

ということでした。

データが0件だったため例外を送出していたということです。

どうやって修正するか

方法1:取得データが0件であることが仕様として正しい場合
QueryFirstOrDefaultAsync<T> を使う。
QueryFirstOrDefaultAsync<T> は取得できたデータが0件の場合、nullが返ってくる。
そのため、nullデータを適切に処理すればOK

方法2:取得データが0件であることが仕様として間違っている場合
例外処理をする

catch( InvalidOperationException ex)

で例外を受け取って適切な処理をする

まとめ

データを1件だけ取得したいけど、0件の時もある場合は QueryFirstOrDefaultAsync<T> を使おう
そして仕様はちゃんと確認しよう(戒め)

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0