「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Dapperは、Micro-ORMである。
- Micro-ORMは、RDBとはマッピングしないので、ORMではない。
- 言うなれば、DataMapper?とかTableMapper?と言った機能。
- 実際、Dapperは、
- 純粋な実行とBean(POCO)とのマッピングのみ提供する。
- パフォーマンスと使いやすさを念頭に置いて開発されている。
機能 †
以下の機能を持つ。
クエリビルダ †
基本的には無い。生SQLを実行する機能のみ提供される。
以下の拡張ライブラリが該当機能を提供している。
SQL実行 †
パラメタライズド・クエリ †
パラメタライズド・クエリ機能はアリ。
- ADO.NETよりパラメタライズド処理が書き易い。
- IN句に含めるリストに値をバインドする機能などもある。
トランザクション †
トランザクション処理に対応する。
以下のように処理すると良い。
未コミットのものはロールバックになるので、try-catchは不要。
using(var tr = cn.BeginTransaction())
{
cn.Execute("・・・・", ・・・, tr);
tr.Commit();
}
その他 †
マッピング †
結果セットとBean(POCO)をマッピングする機能。
- Queryメソッドでは、IEnumrable<Dynamic>型に格納される。
- Query<T>メソッドでは、T型のBean(POCO)にマッピングして、格納される。
- 列名に別名を付与する場合は、AS句を使用すれば良い。
- 大文字・小文字は関係なくマッピングする。
- 別途マッピングルールを型毎に設定することが可能。
- ADO.NET 型付DataSet? の場合よりマッピング処理が書き易い。
実装 †
主に、ADO.NET の IDBConnection に拡張メソッドを追加している。
拡張 †
以下の様なCRUDヘルパーがある。
更新用の拡張ライブラリ †
DapperExtensions? †
- SQLを書かずして更新処理を実装する。
- テーブルに対応したBean(POCO)が必要になる。
- デフォルトでは以下の条件に合致している必要がある。
- テーブルの主キーが1つ
- Idや****Idといった名称
クエリビルダ †
Dapper.Rainbow †
Dapper.Contrib †
JSON †
DapperのQuery<dynamic>()の戻り値をJSONへ変換して、
サーバーをJSON吐く土管にする場合、以下のようにできる。
感想 †
Dapperを使って認証基盤のユーザストアの永続化をO/R的に実装してみた感想。
- O/Rはエンプラ・ドメインのRDBデータアクセス的には正直微妙。
- プログラム側のデータの持たせ方がO/Rと根本的に異なる。
- Dapperは単純な分、問題が浮き彫りになる(EFは複雑で気が付き難い)。
- ただしNoSQLやX.500などユーザストアを可変にするには、
オブジェクト <---> ストア的な実装が汎用的で且必要なのは確か。
参考 †
Tags: :データアクセス, :.NET開発, :ADO.NET