マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ココで使用したので調査した情報などを纏めました。

Dapperは、Micro-ORMである。

  • Micro-ORMは、RDBとはマッピングしないので、ORMではない。
  • 言うなれば、DataMapper?とかTableMapper?と言った機能。
  • 実際、Dapperは、
    • 純粋な実行とBean(POCO)とのマッピングのみ提供する。
    • パフォーマンスと使いやすさを念頭に置いて開発されている。

機能

以下の機能を持つ。

クエリビルダ

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での利用

参考

使用例

ADO.NET vs ORM (Entity Framework, Dapper)


Tags: :データアクセス, :.NET開発, :ADO.NET


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-01-15 (火) 09:55:45 (1920d)