Dapper
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[データアクセスのいろいろ]]
--[[ADO.NET vs ORM (Entity Framework, Dapper)]]
* 目次 [#xc0629db]
#contents
*概要 [#n112bc5b]
[[ココ>https://github.com/OpenTouryoProject/MultiPurposeA...
Dapperは、Micro-ORMである。
-Micro-ORMは、RDBとはマッピングしないので、ORMではない。
-言うなれば、DataMapperとかTableMapperと言った機能。
-実際、Dapperは、
--純粋な実行とBean(POCO)とのマッピングのみ提供する。
--パフォーマンスと使いやすさを念頭に置いて開発されている。
*機能 [#x4d90167]
以下の機能を持つ。
**クエリビルダ [#ifc13812]
-基本的には無い。
-生SQLを実行する機能のみ提供される。
-[[以下の拡張ライブラリ>#x97c4fa1]]が該当機能を提供してい...
**SQL実行 [#ae021507]
***パラメタライズド・クエリ [#z0411107]
パラメタライズド・クエリ機能はアリ。
-ADO.NETよりパラメタライズド処理が書き易い。
-IN句に含めるリストに値をバインドする機能などもある。
***トランザクション [#v70097e2]
トランザクション処理に対応する。
以下のように処理すると良い。
-RazorでのDapperサンプル(トランザクション使ってUpdate)~
https://gist.github.com/kiyokura/7185408
-usingステートメントを使えば~
SqlTransactionの明示的なRollbackは不要 - プログラマーな日...
http://blog.jhashimoto.net/entry/20111008/1318231481
未コミットのものはロールバックになるので、try-catchは不要。
using(var tr = cn.BeginTransaction())
{
cn.Execute("・・・・", ・・・, tr);
tr.Commit();
}
***その他 [#od2ce0fa]
-ストアドプロシジャを実行可能。
**マッピング [#gb94a6a8]
結果セットとBean(POCO)をマッピングする機能。
-Queryメソッドでは、IEnumrable<Dynamic>型に格納される。
-Query<T>メソッドでは、T型のBean(POCO)にマッピングして、...
-列名に別名を付与する場合は、AS句を使用すれば良い。
-大文字・小文字は関係なくマッピングする。
-別途マッピングルールを型毎に設定することが可能。
-ADO.NET 型付DataSet の場合よりマッピング処理が書き易い。
**実装 [#q3dc7250]
主に、ADO.NET の IDBConnection に拡張メソッドを追加してい...
*拡張 [#x97c4fa1]
以下の様なCRUDヘルパーがある。
**更新用の拡張ライブラリ [#i2b00ee4]
***DapperExtensions [#g2da64d7]
-SQLを書かずして更新処理を実装する。
-テーブルに対応したBean(POCO)が必要になる。
-デフォルトでは以下の条件に合致している必要がある。
--テーブルの主キーが1つ
--Idや****Idといった名称
-参考
--hollycot: DapperExtensionsを使ってみる~
http://hollycot.blogspot.jp/2015/05/dapperextensions.html
--hollycot: DapperExtensionsを使ってみる2~
http://hollycot.blogspot.jp/2015/09/dapperextensions.html
**クエリビルダ [#ye7bc04a]
***Dapper.Rainbow [#hab4a1bf]
詳細不明
***Dapper.Contrib [#mc6cf830]
詳細不明
***自作の例 [#qac59d34]
以下を参考にすると、上記は微妙らしい。
-neue cc - Micro-ORMとC#(とDapperカスタマイズ)~
http://neue.cc/2012/12/11_390.html
ココの処理の内容を見ると、
-ExpressionHelperを引数に取る拡張メソッド~
≒ LINQを処理可能な拡張メソッド
でSQLを生成している。
余談:
>...と言うことで、~
パラメタセットによって、SQL定義を動的に編集する方法ではな...
Dapperは、パラメタセットはBean(POCO)のプロパティ ≒ 固定な...
別の方法でSQL編集するしか無く、ParameterによってSQL定義を...
[[動的パラメタライズド・クエリ>ADO.NET vs ORM (Entity Fra...
**ログ出力 [#we3de767]
MiniProfilerを使用してログ出力処理を実装できる。
-Output the tracelog using Dapper. · Issue #45 · OpenTour...
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
*その他 [#cc4cf5c1]
**クラスの階層構造 [#r2fede70]
以下のようにORMできるが、
-dapper dot net - 1対多のテーブルをコレクションプロパティ...
http://ichiroku11.hatenablog.jp/entry/2015/04/13/234109
-Code, code and more code.: Exploring Tuples as a Library...
http://blog.marcgravell.com/2017/04/exploring-tuples-as-l...
BA(ビジネス・アプリケーション)ではほぼ、採用しない方式。
-スキーマ構造に合わせたデータ保持をしない。
--論理データ独立性が重要。
--また、コードが複雑化する。
-プログラム側でのOrderByで性能が劣化する。
**JSONへの変換 [#x6685da9]
DapperのQuery<dynamic>()の戻り値をJSONへ変換して、~
サーバーをJSON吐く土管にする場合、以下のようにできる。
-DapperのQuery<dynamic>()の戻りをASP.NET MVCのJsonResult...
http://kiyokura.hateblo.jp/entry/2014/12/04/000818
-DapperのQuery<dynamic>()の結果セットのフィールド名を取得...
http://kiyokura.hateblo.jp/entry/2016/12/09/131602
**Oracleでの利用 [#u255c115]
-Dapper.Netを使ってみる - けさらんぱさらん~
http://d.hatena.ne.jp/cer1974/20120205/1328450442
-DapperでOracleのNUMBERと.NETのBooleanをマッピングする - ...
http://kiyokura.hateblo.jp/entry/2013/11/08/015826
-Getting started with Dapper – logically illogical~
https://takaloy.wordpress.com/2015/05/10/getting-started-...
-Dapper – Micro ORM for Oracle and Microsoft .NET~
https://blog.vijay.name/2012/07/dapper-micro-orm-for-orac...
*参考 [#c5ba050d]
-ORMとかdapper dot netについてお話させていただきました - ...
http://kiyokura.hateblo.jp/entry/20131014/p1
-Dapperの簡単な使い方メモ (Dapper .NET, Micro ORM, 速い) ...
http://devlights.hatenablog.com/entry/2014/02/02/000000
--Dapper .NETのサンプル~
https://gist.github.com/devlights/8779382
-C# + MySQL + Dapper で軽量 O/R Mapper | Aiming 開発者ブ...
https://developer.aiming-inc.com/programming/csharp-mysql...
-How to work with Dapper in C# | InfoWorld~
http://www.infoworld.com/article/3025784/application-deve...
-データ ポイント - Dapper、Entity Framework、およびハイブ...
https://msdn.microsoft.com/ja-jp/magazine/mt703432.aspx
**使用例 [#gda6d541]
-[[MultiPurposeAuthSiteのUserStoreクラスでDapperを使用し...
**[[ADO.NET vs ORM (Entity Framework, Dapper)]] [#n76b8155]
----
Tags: [[:データアクセス]], [[:.NET開発]], [[:ADO.NET]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[データアクセスのいろいろ]]
--[[ADO.NET vs ORM (Entity Framework, Dapper)]]
* 目次 [#xc0629db]
#contents
*概要 [#n112bc5b]
[[ココ>https://github.com/OpenTouryoProject/MultiPurposeA...
Dapperは、Micro-ORMである。
-Micro-ORMは、RDBとはマッピングしないので、ORMではない。
-言うなれば、DataMapperとかTableMapperと言った機能。
-実際、Dapperは、
--純粋な実行とBean(POCO)とのマッピングのみ提供する。
--パフォーマンスと使いやすさを念頭に置いて開発されている。
*機能 [#x4d90167]
以下の機能を持つ。
**クエリビルダ [#ifc13812]
-基本的には無い。
-生SQLを実行する機能のみ提供される。
-[[以下の拡張ライブラリ>#x97c4fa1]]が該当機能を提供してい...
**SQL実行 [#ae021507]
***パラメタライズド・クエリ [#z0411107]
パラメタライズド・クエリ機能はアリ。
-ADO.NETよりパラメタライズド処理が書き易い。
-IN句に含めるリストに値をバインドする機能などもある。
***トランザクション [#v70097e2]
トランザクション処理に対応する。
以下のように処理すると良い。
-RazorでのDapperサンプル(トランザクション使ってUpdate)~
https://gist.github.com/kiyokura/7185408
-usingステートメントを使えば~
SqlTransactionの明示的なRollbackは不要 - プログラマーな日...
http://blog.jhashimoto.net/entry/20111008/1318231481
未コミットのものはロールバックになるので、try-catchは不要。
using(var tr = cn.BeginTransaction())
{
cn.Execute("・・・・", ・・・, tr);
tr.Commit();
}
***その他 [#od2ce0fa]
-ストアドプロシジャを実行可能。
**マッピング [#gb94a6a8]
結果セットとBean(POCO)をマッピングする機能。
-Queryメソッドでは、IEnumrable<Dynamic>型に格納される。
-Query<T>メソッドでは、T型のBean(POCO)にマッピングして、...
-列名に別名を付与する場合は、AS句を使用すれば良い。
-大文字・小文字は関係なくマッピングする。
-別途マッピングルールを型毎に設定することが可能。
-ADO.NET 型付DataSet の場合よりマッピング処理が書き易い。
**実装 [#q3dc7250]
主に、ADO.NET の IDBConnection に拡張メソッドを追加してい...
*拡張 [#x97c4fa1]
以下の様なCRUDヘルパーがある。
**更新用の拡張ライブラリ [#i2b00ee4]
***DapperExtensions [#g2da64d7]
-SQLを書かずして更新処理を実装する。
-テーブルに対応したBean(POCO)が必要になる。
-デフォルトでは以下の条件に合致している必要がある。
--テーブルの主キーが1つ
--Idや****Idといった名称
-参考
--hollycot: DapperExtensionsを使ってみる~
http://hollycot.blogspot.jp/2015/05/dapperextensions.html
--hollycot: DapperExtensionsを使ってみる2~
http://hollycot.blogspot.jp/2015/09/dapperextensions.html
**クエリビルダ [#ye7bc04a]
***Dapper.Rainbow [#hab4a1bf]
詳細不明
***Dapper.Contrib [#mc6cf830]
詳細不明
***自作の例 [#qac59d34]
以下を参考にすると、上記は微妙らしい。
-neue cc - Micro-ORMとC#(とDapperカスタマイズ)~
http://neue.cc/2012/12/11_390.html
ココの処理の内容を見ると、
-ExpressionHelperを引数に取る拡張メソッド~
≒ LINQを処理可能な拡張メソッド
でSQLを生成している。
余談:
>...と言うことで、~
パラメタセットによって、SQL定義を動的に編集する方法ではな...
Dapperは、パラメタセットはBean(POCO)のプロパティ ≒ 固定な...
別の方法でSQL編集するしか無く、ParameterによってSQL定義を...
[[動的パラメタライズド・クエリ>ADO.NET vs ORM (Entity Fra...
**ログ出力 [#we3de767]
MiniProfilerを使用してログ出力処理を実装できる。
-Output the tracelog using Dapper. · Issue #45 · OpenTour...
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
*その他 [#cc4cf5c1]
**クラスの階層構造 [#r2fede70]
以下のようにORMできるが、
-dapper dot net - 1対多のテーブルをコレクションプロパティ...
http://ichiroku11.hatenablog.jp/entry/2015/04/13/234109
-Code, code and more code.: Exploring Tuples as a Library...
http://blog.marcgravell.com/2017/04/exploring-tuples-as-l...
BA(ビジネス・アプリケーション)ではほぼ、採用しない方式。
-スキーマ構造に合わせたデータ保持をしない。
--論理データ独立性が重要。
--また、コードが複雑化する。
-プログラム側でのOrderByで性能が劣化する。
**JSONへの変換 [#x6685da9]
DapperのQuery<dynamic>()の戻り値をJSONへ変換して、~
サーバーをJSON吐く土管にする場合、以下のようにできる。
-DapperのQuery<dynamic>()の戻りをASP.NET MVCのJsonResult...
http://kiyokura.hateblo.jp/entry/2014/12/04/000818
-DapperのQuery<dynamic>()の結果セットのフィールド名を取得...
http://kiyokura.hateblo.jp/entry/2016/12/09/131602
**Oracleでの利用 [#u255c115]
-Dapper.Netを使ってみる - けさらんぱさらん~
http://d.hatena.ne.jp/cer1974/20120205/1328450442
-DapperでOracleのNUMBERと.NETのBooleanをマッピングする - ...
http://kiyokura.hateblo.jp/entry/2013/11/08/015826
-Getting started with Dapper – logically illogical~
https://takaloy.wordpress.com/2015/05/10/getting-started-...
-Dapper – Micro ORM for Oracle and Microsoft .NET~
https://blog.vijay.name/2012/07/dapper-micro-orm-for-orac...
*参考 [#c5ba050d]
-ORMとかdapper dot netについてお話させていただきました - ...
http://kiyokura.hateblo.jp/entry/20131014/p1
-Dapperの簡単な使い方メモ (Dapper .NET, Micro ORM, 速い) ...
http://devlights.hatenablog.com/entry/2014/02/02/000000
--Dapper .NETのサンプル~
https://gist.github.com/devlights/8779382
-C# + MySQL + Dapper で軽量 O/R Mapper | Aiming 開発者ブ...
https://developer.aiming-inc.com/programming/csharp-mysql...
-How to work with Dapper in C# | InfoWorld~
http://www.infoworld.com/article/3025784/application-deve...
-データ ポイント - Dapper、Entity Framework、およびハイブ...
https://msdn.microsoft.com/ja-jp/magazine/mt703432.aspx
**使用例 [#gda6d541]
-[[MultiPurposeAuthSiteのUserStoreクラスでDapperを使用し...
**[[ADO.NET vs ORM (Entity Framework, Dapper)]] [#n76b8155]
----
Tags: [[:データアクセス]], [[:.NET開発]], [[:ADO.NET]]
ページ名: