【Entity Framework Core】コードからデータベースを自動生成する
Entity Framework Core のコードから、データベースを自動生成する方法を記載します。
<確認環境>
Windows10 64bit
Visual Studio 2022
.NET7.0
Microsoft.EntityFrameworkCore.SqlServer v7.0.5
Microsoft.EntityFrameworkCore.Tools v7.0.5
Microsoft SQL Server 2022 Developer Edition (64-bit)
Windows10 64bit
Visual Studio 2022
.NET7.0
Microsoft.EntityFrameworkCore.SqlServer v7.0.5
Microsoft.EntityFrameworkCore.Tools v7.0.5
Microsoft SQL Server 2022 Developer Edition (64-bit)
EntityFrameworkCoreとは
Entity Framework Coreは、オープンソースのORM(Object-Relational Mapping)です。
データベースのテーブルをModelクラスにマッピングすることで、データの取得、挿入、更新、削除を簡単に行えるようにします。
Entity Framework Coreは幅広いデータベースをサポートし、変更追跡、同時実行制御、移行サポートなどの豊富な機能を提供します。
https://learn.microsoft.com/ja-jp/ef/core/
Entity Framework Coreは幅広いデータベースをサポートし、変更追跡、同時実行制御、移行サポートなどの豊富な機能を提供します。
https://learn.microsoft.com/ja-jp/ef/core/
Nugetパッケージインストール
Entity Framework CoreのNugetパッケージをインストールします。
Microsoft.EntityFrameworkCore.SqlServerのインストール
データベースを操作するパッケージをインストールします。パッケージは使用するデータベースに合わせて選択します。今回はSQLServerを使用するため、Microsoft.EntityFrameworkCore.SqlServerをインストールします。
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択してコマンドを実行します。
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択してコマンドを実行します。
Install-Package Microsoft.EntityFrameworkCore.SqlServer
または、[プロジェクト] > [NuGet パッケージ管理] でMicrosoft.EntityFrameworkCore.SqlServerを検索してインストールします。
Microsoft.EntityFrameworkCore.Toolsのインストール
Microsoft.EntityFrameworkCore.Toolsは、データベースのマイグレーションやコードからのデータベース生成など、開発者がデータベースを管理するために必要なツールが含まれています。
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択してコマンドを実行します。
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択してコマンドを実行します。
Install-Package Microsoft.EntityFrameworkCore.Tools
または、[プロジェクト] > [NuGet パッケージ管理] でMicrosoft.EntityFrameworkCore.Toolsを検索してインストールします。
Modelクラス作成
作成したいテーブル定義にあわせてModelクラスを作成します。
以降で説明するデータベース生成コマンドを実行すると、Modelクラスとマッピングされたテーブルが作成され、Modelクラス経由でテーブルデータの操作が可能となります。
以降で説明するデータベース生成コマンドを実行すると、Modelクラスとマッピングされたテーブルが作成され、Modelクラス経由でテーブルデータの操作が可能となります。
今回の例で作成するテーブル定義は以下とします。
Modelクラス作成
データベースのテーブル定義に合わせてModelクラスを作成します。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
ModelクラスのAttribute設定
ModelクラスにAttributeを設定することで、テーブル定義の詳細を設定できます。いくつか例を記載します。
- 主キー
プロパティに[Key]を設定すると主キーとして認識します。プロパティ名がId または <クラス名>Idの場合は、[Key]がなくても主キーとして認識します。
[Key]
public int ProcessNo { get; set; }
プロパティに[DatabaseGenerated(DatabaseGeneratedOption.Identity)]を設定すると、データベースで価を自動採番します。[DatabaseGenerated(DatabaseGeneratedOption.None)]を設定すると自動採番しません。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] // 自動採番あり
public int Seq { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)] // 自動採番なし
public int Id { get; set; }
プロパティに[Column("列名")]を設定すると、列名を指定できます。
[Column("ProductName")]
public string Name { get; set; }
プロパティに[Column(TypeName = "データ型")]を設定すると、列のデータ型を指定できます。
[Column(TypeName = "nvarchar(50)")]
public string UserName { get; set; }
プロパティに[MaxLength(最大長)]を設定すると、列の最大長を指定できます。
[MaxLength(100)]
public string Name { get; set; }
DBContextクラス作成
DbContextを継承したクラスに、データベースの接続設定とテーブルに対応するエンティティクラス(DbSet<T>)を定義します
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
public class MyDBContext : DbContext
{
// テーブルのエンティティクラス
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categorys { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// SQLServer接続設定
var builder = new SqlConnectionStringBuilder
{
DataSource = "localhost", // データベースのホスト名またはIPアドレス
InitialCatalog = "EFCoreDB", // 接続先のデータベース名
IntegratedSecurity = true, // Windows認証を使用する
TrustServerCertificate = true // サーバー証明書を信頼する
};
options.UseSqlServer(builder.ConnectionString);
}
}
データベース生成
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択してコマンドを実行します。
Add-Migration InitialCreate
Update-Database
- Add-Migrationコマンド
- Update-Databaseコマンド
データベースを生成するためのマイグレーションファイルを作成します。"InitialCreate"はマイグレーションファイルのクラス名となります。コマンドが成功すると、Migrationsフォルダに、作成日時_クラス名.cs が作成されます。
マイグレーションファイルをもとに、データベースを生成します。
コマンドが成功すると、データベースが自動生成されます。
__EFMigrationsHistoryテーブルは初回マイグレーション時に作成され、履歴が追加されます。
データベース更新
作成済みのデータベースもデータベース生成と同様にコマンドを実行して更新できます。Modelクラスを更新します。
using System.ComponentModel.DataAnnotations;
public class Product
{
public int Id { get; set; }
[MaxLength(50)] // 最大文字数(50)に変更
public string Name { get; set; }
public string Description { get; set; } // 商品説明列を追加
public int Price { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
コマンドを実行してModelクラスの変更をデータベースに反映します。
Add-Migration UpdateProduct
Update-Database
コマンドが成功すると、データベースのテーブル定義が更新されます。
__EFMigrationsHistoryテーブルに更新履歴が追加されます。