アクセス方法

  • ADO.NET .... 最も低レベルなAPIですが、高速
  • Entity Framework ... いわゆるO/Rマッパで、高レベルなAPIだが、相対的に遅い
  • Dapper ... Micro ORMと言われる部類のもので、中レベルなAPIだが、比較的高速(ADOに近い)

速度比較

Dapper

PostgreSQL

nvarchar(4000)

SetSnakeToPascal?()

Dapper Plus

  • Bulk Insert
  • Bulk Update
  • Bulk Delete
  • Bulk Merge

Dapper.Extensions.Linq

Linq2Dapper

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句

マルチマッピング

実行時間タイムアウト

  • defaultは 30 秒
  • 指定したい場合は、以下のように Query(), Execute()で commandTimeout パラメタを設定
    dbConnection.Query<TransactionLog>(sQuery, commandTimeout: 180);

Dapper Plus

  • 有料ツール

Entity Framework Core

  • 従来の Entity Framework と異なり、EF Core では O/R マッパーファイル(*.dbml)を使うことができない
  • このため、O/R マッピング(データベーステーブルのどこを構造体クラスのどこにマッピングするのか?)はすべてコードで指定する必要がある
  • ツールを利用して自動生成させることも(ある程度は)可能ですが、現時点(2016/07/02)では、手で書いてしまったほうがやりやすい

Code First

  • 今後はこれが主流
  • ソフトウェアを開発するにあたり、「リレーショナルデータベース設計ありき」ではなくて「作成するソフトウェアの”ドメイン領域の分析”に注力し、データベースはモデルのあるタイミングにおけるシリアライズ結果を保存する入れ物」的な考え方が基本となっている
  • リレーショナルデータベースとドメインオブジェクトは、その概念の相違から「インピーダンス・ミスマッチ」が発生することは必然であり、ソフトウェア側の人間としては、ドメイン領域のオブジェクトモデリングに集中すべき、という思想

Database First

Model First

使い方

  • 以下のNuGetパッケージをインストール(DBにSQLiteを使う場合)
    $ dotnet add package Microsoft.EntityFrameworkCore
    $ dotnet add package Microsoft.EntityFrameworkCore.Tools
    $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite
    $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite.Design
  • [プロジェクト名].csproj に以下を追記 <= これをやらないと「dotnet ef」コマンドが使えない
    <ItemGroup>
      <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    </ItemGroup>
  • プロジェクトフォルダにて以下を実行
    $ dotnet restore
  • DBスキーマ構築・更新
    $ dotnet ef migrations add Initial
    $ dotnet ef database update
    • 上記「Initial」の記述は何でもよい

エラー対応

SqlException?: Timeout expired.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-08 (水) 14:26:41 (893d)