EFCore

vscode上でdotnetコマンドを利用して、ローカルで起動しているPostgreSQLを元にDBContextやテーブルに対応するクラスを自動生成する方法です。

PCのセットアップ(初回のみ)

dotnetコマンドでdotnet-efが使用できるように、以下のツールをインストールします。

dotnet tool install --global dotnet-ef

また、自動生成用のテンプレートファイルを作成するために、以下のテンプレートもインストールします。

EFCoreテンプレート用のパッケージをインストールする必要があるため以下のコマンドを実行します。

```bash
dotnet new install Microsoft.EntityFrameworkCore.Templates

プロジェクトの設定

プロジェクトに以下のNuGetパッケージを追加します。

  • Microsoft.EntityFrameworkCore.Design
  • Npgsql.EntityFrameworkCore.PostgreSQL ※PostgreSQLの場合。ほかのデータベースであれば、各データベースごとのパッケージを追加してください

自動生成方法

プロジェクトのディレクトリで以下のコマンドを実行します。

dotnet ef dbcontext scaffold "Server=localhost;Database=postgres;Port=50069;Username=postgres;Password=Password" Npgsql.EntityFrameworkCore.PostgreSQL -o Models -f --context-dir Contexts 
  • 引数

    • 第一引数 : データベースの接続文字列を指定します
    • 第二引数 : 使用するプロバイダー。Scaffold元のデータベースの種類に応じて追加したNuGetパッケージの名前を記載します。
  • オプション

    オプション短縮概要
    –context-c生成するDBContextのクラス名
    –context-dir DBContextファイルを配置する相対パス
    –force-f既存のファイルを上書きします
    –output-dir-oテーブルに対応するクラスを配置する相対パス

上記のコマンドを実行すると、Contextsフォルダ下にDbContextが、Modelsフォルダ下に、テーブルに対応したクラスが自動生成されます。

VSCoeのエクスプローラー

自動生成される内容をカスタマイズする場合

EFCoreのカスタムテンプレートの機能を使用することで、自動生成されるDBContextの内容やテーブルに対応したクラスの内容をカスタマイズすることができます(と書きつつどうカスタマイズできるのかは勉強中…)

テンプレートファイルの生成方法

以下コマンドをプロジェクトのディレクトリで実行します

dotnet new ef-templates

上記コマンド実行後に、プロジェクトのディレクトリに以下のフォルダとファイルが生成されます。

CodeTemplates/
└── EFCore/
    ├── DbContext.t4
    └── EntityType.t4
  • DbContext.t4 … DbContextを生成する際のテンプレートファイル
  • EntityType.t4 … テーブルに対応するクラスを生成する際のテンプレートファイル

参考