アクセス方法 †
- ADO.NET .... 最も低レベルなAPIですが、高速
- Entity Framework ... いわゆるO/Rマッパで、高レベルなAPIだが、相対的に遅い
- Dapper ... Micro ORMと言われる部類のもので、中レベルなAPIだが、比較的高速(ADOに近い)
速度比較 †
PostgreSQL †
nvarchar(4000) †
SetSnakeToPascal?() †
- Bulk Insert
- Bulk Update
- Bulk Delete
- Bulk Merge
Dapper.Extensions.Linq †
Tips †
like 検索 †
- Does Dapper support the like operator?
- 普通にプリペアードステートメントで値をセットしようとするとできないので、SQL文にCONCAT関数を使う
string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');"
var results = connection.query<country>(query, new {name});
IN句 †
マルチマッピング †
実行時間タイムアウト †
- 従来の Entity Framework と異なり、EF Core では O/R マッパーファイル(*.dbml)を使うことができない
- このため、O/R マッピング(データベーステーブルのどこを構造体クラスのどこにマッピングするのか?)はすべてコードで指定する必要がある
- ツールを利用して自動生成させることも(ある程度は)可能ですが、現時点(2016/07/02)では、手で書いてしまったほうがやりやすい
Code First †
- 今後はこれが主流
- ソフトウェアを開発するにあたり、「リレーショナルデータベース設計ありき」ではなくて「作成するソフトウェアの”ドメイン領域の分析”に注力し、データベースはモデルのあるタイミングにおけるシリアライズ結果を保存する入れ物」的な考え方が基本となっている
- リレーショナルデータベースとドメインオブジェクトは、その概念の相違から「インピーダンス・ミスマッチ」が発生することは必然であり、ソフトウェア側の人間としては、ドメイン領域のオブジェクトモデリングに集中すべき、という思想
Database First †
Model First †
使い方 †
- プロジェクトフォルダにて以下を実行
$ dotnet restore
エラー対応 †
SqlException?: Timeout expired. †
- ASP.NET で SQLのコマンドがタイムアウトした場合の対応方法
- web.configのconnectionString属性にConnection Timeout=180;を追記
- web.configのhttpRuntimeにexecutionTimeout属性を追加し180秒に設定
- ソースコードの中でコマンドのタイムアウト時間を180秒に設定
|