dapper dot netで列挙型にマッピングする
dapper dot netは列挙型へのマッピングにも対応しています。 ドキュメントには書いていないようなんですが、テストコードにはありました。
早速試してみます。
まずは列挙型のプロパティにマッピング。2つとも"Monday"と表示されます。文字列もenumにマッピングしてくれるんですね。
class QueryResult { public DayOfWeek DayOfWeek { get; set; } } // intをDayOfWeekプロパティにマッピング var result1 = connection .Query<QueryResult>("select 1 as DayOfWeek;") .First(); Console.WriteLine(result1.DayOfWeek); // Monday // 文字列をDayOfWeekプロパティにマッピング var result2 = connection .Query<QueryResult>("select 'Monday' as DayOfWeek;") .First(); Console.WriteLine(result2.DayOfWeek); // Monday
今度は列挙型の戻り値として取得する場合。
// intをDayOfWeekとして取得 var result3 = connection .Query<DayOfWeek>("select 1;") .First(); Console.WriteLine(result3); // Monday // 文字列をDayOfWeekとして取得 // 例外がスロー /* var result4 = connection .Query<DayOfWeek>( "select 'Monday';" ) .First(); Console.WriteLine( result4 ); */
こちらは文字列をマッピングできないようです。Enum.ToObject
で例外がスローされます。
文字列を列挙型プロパティにマッピングする方がどうしているのかを知りたくてソースを追ってみたんですが、途中でILGenerator.Emitとか出てきて、私にはさっぱりわかりませんでした・・・。
ソース全体はこちらに。