.NET アプリケーション開発において、データベース操作を効率化する ORM (Object-Relational Mapper) である Entity Framework Core (EF Core) の導入手順を解説します。
本記事では、主要な4大データベース(SQLite, SQL Server, PostgreSQL, MySQL)それぞれについて、パッケージのインストールから appsettings.json への記述、そして Program.cs での依存関係注入(DI)の設定までを網羅しました。
1. 事前準備 (dotnet ツールのインストール)
EF Core を使用してデータベースのマイグレーション(テーブル作成など)を行うには、CLI ツールが必要です。以下のコマンドでグローバルインストールしておきましょう。
# ツールのインストール
dotnet tool install --global dotnet-ef
# 既にインストール済みの場合は最新版へ更新
dotnet tool update --global dotnet-ef
2. NuGetパッケージのインストール
プロジェクトに必要なライブラリを追加します。 共通で必要な Design パッケージと、使用するデータベースに応じたプロバイダを選択してインストールしてください。
共通 (必須)
dotnet add package Microsoft.EntityFrameworkCore.Design
データベース別プロバイダ
SQLite の場合
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
SQL Server の場合
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
PostgreSQL の場合
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
MySQL (MariaDB) の場合 ※MySQL公式ライブラリよりも、コミュニティ標準である Pomelo 製ライブラリが推奨されています。
dotnet add package Pomelo.EntityFrameworkCore.MySql
3. モデルとDbContextの定義
ここでは例として Book エンティティと、それを管理する ExampleDbContext を定義します。このコードは使用するデータベースに関わらず共通です。
using Microsoft.EntityFrameworkCore;
namespace MyApp.Models
{
// 1. エンティティ(テーブル定義)
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}
// 2. DbContext(DB操作の窓口)
public class ExampleDbContext : DbContext
{
public ExampleDbContext(DbContextOptions<ExampleDbContext> options)
: base(options)
{
}
// テーブルとしての定義
public DbSet<Book> Books { get; set; }
}
}
4. 接続文字列の定義 (appsettings.json)
appsettings.json に接続文字列を記述します。使用するデータベースの行を参考にしてください。
{
"ConnectionStrings": {
"SqliteConnection": "Data Source=Example.db",
"SqlServerConnection": "Server=(localdb)\\mssqllocaldb;Database=ExampleDb;Trusted_Connection=True;MultipleActiveResultSets=true",
"PostgreSqlConnection": "Host=localhost;Database=ExampleDb;Username=postgres;Password=password",
"MySqlConnection": "Server=localhost;Database=ExampleDb;User=root;Password=password"
}
}
5. 依存関係の挿入 (Program.cs)
アプリケーション起動時に、DbContext を DI コンテナに登録します。ここで使用するデータベースの種類を指定します。
SQLite を使う場合
using Microsoft.EntityFrameworkCore;
using MyApp.Models;
var builder = WebApplication.CreateBuilder(args);
// SQLite の設定
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseSqlite(
builder.Configuration.GetConnectionString("SqliteConnection")));
SQL Server を使う場合
// SQL Server の設定
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("SqlServerConnection")));
PostgreSQL を使う場合
// PostgreSQL の設定
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseNpgsql(
builder.Configuration.GetConnectionString("PostgreSqlConnection")));
MySQL (Pomelo) を使う場合
MySQL の場合のみ、接続先のサーバーバージョンを自動検知させる記述 (ServerVersion.AutoDetect) が必要になります。
// MySQL (Pomelo) の設定
var connectionString = builder.Configuration.GetConnectionString("MySqlConnection");
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseMySql(
connectionString,
ServerVersion.AutoDetect(connectionString)));
6. データベースの作成 (マイグレーション)
設定が完了したら、最後に以下のコマンドを実行してデータベースとテーブルを作成します。
# 1. マイグレーションファイルの作成 (InitialCreateは任意の名前)
dotnet ef migrations add InitialCreate
# 2. データベースへの反映
dotnet ef database update
まとめ
以上で Entity Framework Core の導入と初期設定は完了です。
どのデータベースを使用する場合でも、基本的な DbContext の定義は変わらず、Program.cs での接続設定とインストールするパッケージを切り替えるだけで対応できるのが EF Core の強みです。プロジェクトの要件に合わせて適切なデータベースを選択し、開発を進めてください。
