みんなのちからになりたい

コピペでブログラムつくっていきたい

Dapperのレコードアクセスがobjectで使いづらいのでどうにかしたい

ひっさびさにC#でコード書いてて、DBはACCESSなんだけどもOleDbCommandとかExecuteNonQueryとか書かされるのもつらいのでよさげなORM探してたらDapperが一番有名そうだったので使ってみた。

github.com

概ね使いやすいんだけども、クエリの戻り値がデフォルトだとobject/dynamicになってて、フィールドへのアクセスがプロパティになるので使いづらいことがあった。

classとかでmappingしてるならともかく、今回使う古の時代から代々継承されてきたテーブルだと、金額1、金額2、~金額99みたいなフィールド名があり、しかも金額nの何個目まで入っているかは個数というフィールドに入っているという、cの配列やってんじゃねえんだよみたいな感じのテーブルがあり、プロパティアクセスでは太刀打ち出来なくてどうしたらいいか途方に暮れていたけど、こういうときはテストみたらなんか書いてあるだとと思ってみてみたらちゃんと書いてあった。

結論

https://github.com/StackExchange/dapper-dot-net/blob/master/Tests/Tests.cs#L1658

asでもキャストでもいいけどIDictionary<string, object>でKey/Valueでアクセスできるっぽくて、実際やってみたら最強伝説だった。

Dapper、いいですね。


プログラミングC# 第7版

プログラミングC# 第7版

独習C# 第3版

独習C# 第3版

C#実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング

C#実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング