「マイクロソフト系技術情報 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 †
詳細不明
自作の例 †
以下を参考にすると、上記は微妙らしい。
ココの処理の内容を見ると、
- ExpressionHelper?を引数に取る拡張メソッド
≒ LINQを処理可能な拡張メソッド
でSQLを生成している。
余談:
...と言うことで、
パラメタセットによって、SQL定義を動的に編集する方法ではなさそう。
Dapperは、パラメタセットはBean(POCO)のプロパティ ≒ 固定なので、
別の方法でSQL編集するしか無く、ParameterによってSQL定義を編集する、
動的パラメタライズド・クエリに組み込むことが不可能だった。
ログ出力 †
MiniProfiler?を使用してログ出力処理を実装できる。
クラスの階層構造 †
以下のようにORMできるが、
BA(ビジネス・アプリケーション)ではほぼ、採用しない方式。
- スキーマ構造に合わせたデータ保持をしない。
- 論理データ独立性が重要。
- また、コードが複雑化する。
- プログラム側でのOrderBy?で性能が劣化する。
JSONへの変換 †
DapperのQuery<dynamic>()の戻り値をJSONへ変換して、
サーバーをJSON吐く土管にする場合、以下のようにできる。
Oracleでの利用 †
参考 †
使用例 †
Tags: :データアクセス, :.NET開発, :ADO.NET