ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Entity Framework Core でデータベースから DbContext を生成する方法

f:id:masatsuna:20210212012626p:plain

Entity Framework Core を使うと、既存のデータベースから DbContext やテーブルに対応するクラス群を自動生成することができます。 ただし Entity Framework 6 までのように、 GUI による操作方法は提供されておらず、すべてコマンドラインから実行する必要があります。

前提条件

  • .NET Core 3.1
  • SQL Server Local DB
  • Entity Framework Core 5.0.3

事前準備

まずは適当にプロジェクトを作成して、以下 2 つの NuGet パッケージをインストールしましょう。

今回は SQL Server Local DB を使うので、 SQL Server 用の EF Core パッケージをインストールします。 また DB から DbContext を生成するために、 Microsoft.EntityFrameworkCore.Design のパッケージも追加します。

パッケージの追加が完了したら、一度ビルドしておきます。

DbContext とテーブルに対応するクラス群の生成

続いて dotnet ef コマンドを使って、 DbContext とテーブルに対応したクラスを生成します。 コマンドプロンプトを立ち上げて、作成したプロジェクトのルートディレクトリ(*.csproj ファイルがあるディレクトリ)に移動します。 続いて以下のようなコマンドを実行します。

dotnet ef dbcontext scaffold "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=<データベース名>;Integrated Security=True;" Microsoft.EntityFrameworkCore.SqlServer --context <DbContextクラスの名前> --output-dir <DbContextとかの出力先ディレクトリ>

このようにコマンドを実行すると、 --output-dir のオプションに指定したディレクトリに、 DbContext と、テーブルデータを保持するためのクラスが生成されます。 DB への接続文字列などは、環境にあわせて修正してください。

特定のテーブルのみ生成したい場合は、 --table オプションを使用すると対象テーブルを指定することができます。

dotnet ef dbcontext scaffold ~省略~ --table <テーブル名> --table <テーブル名>

dotnet ef コマンドが使えない人

以下のコマンドをたたいて、 Entity Framework Core 用の CLI ツールをインストールしましょう。

dotnet tool install --global dotnet-ef

インストール後に再起動しないと使えないこともあります。 詳細は以下のページに解説があります。

docs.microsoft.com