C#でデータベースを扱うときに便利なのが、Entity Framework Core(以下EF Core)です。
SQLを直接書かずに、クラスを通してデータベース操作ができるため、開発効率が大幅に向上します。
本記事では、SQLiteを使ったシンプルなサンプルアプリを題材に、Entity Framework Coreの導入からCRUD操作(データの登録・取得・更新・削除)までをわかりやすく解説します。
Visual StudioやVS Codeで簡単に試せる内容なので、これからC#でデータベースアプリを作りたい方におすすめです。
Entity Framework Coreとは
Entity Framework Core(EF Core)は、Microsoftが開発したO/Rマッパー(Object Relational Mapper)です。
プログラム上のクラスとデータベースのテーブルを自動的に対応づけてくれるため、SQL文を直接書かずにデータ操作ができます。
主な特徴
- マルチデータベース対応:SQLite、SQL Server、MySQL、PostgreSQLなどに対応。
- コードファースト開発:C#のクラス定義からデータベースを自動生成できる。
- LINQによる簡単な操作:
from ... where ... select ...
のような直感的な構文でデータを扱える。
SQLiteは軽量で環境構築が簡単なため、学習や小規模アプリに最適です。
環境準備
まずは開発環境を整えましょう。
必要なもの
- .NET SDK(7.0以上を推奨)
- Visual Studio 2022 または VS Code
- SQLite(組み込みで動作)
プロジェクトの作成
ターミナルまたはコマンドプロンプトで以下を実行します。
dotnet new console -n EfSqliteSample
cd EfSqliteSample
次に、Entity Framework CoreとSQLiteのプロバイダーをインストールします。
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Tools
これで準備完了です。
サンプルプログラムの概要
今回作るサンプルは、シンプルな「ユーザー管理アプリ」です。
ユーザー(名前・メールアドレス)を登録・一覧表示・更新・削除します。
構成は以下の通りです。
EfSqliteSample/
├── Program.cs
├── Models/
│ └── User.cs
└── Data/
└── AppDbContext.cs
Userモデルを作成する
まずは、データベースに対応するエンティティクラスを作ります。
Models/User.cs
を作成して、以下のように記述します。
using System.ComponentModel.DataAnnotations;
namespace EfSqliteSample.Models
{
public class User
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; } = string.Empty;
[Required]
public string Email { get; set; } = string.Empty;
}
}
[Key]
は主キーを示します。[Required]
は必須項目です。
DbContextクラスを作成する
EF Coreでは、DbContext
クラスを通じてデータベースにアクセスします。
Data/AppDbContext.cs
を作成して、以下のように記述します。
using Microsoft.EntityFrameworkCore;
using EfSqliteSample.Models;
namespace EfSqliteSample.Data
{
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=users.db");
}
}
}
ここでUseSqlite()
により、SQLiteデータベースusers.db
を指定しています。
このファイルはアプリ実行時に自動生成されます。
データベースの作成
初回はマイグレーション機能を使ってデータベースを生成します。
コマンドを実行
dotnet ef migrations add InitialCreate
dotnet ef database update
実行後、プロジェクトフォルダにusers.db
が生成されれば成功です。
CRUD操作の実装(Program.cs)
次に、データ登録・取得・更新・削除を行うコードを実装します。
Program.cs
に以下を記述してください。
using EfSqliteSample.Data;
using EfSqliteSample.Models;
using (var db = new AppDbContext())
{
// --- Create ---
var user = new User { Name = "山田太郎", Email = "taro@example.com" };
db.Users.Add(user);
db.SaveChanges();
Console.WriteLine($"登録完了: {user.Name}");
// --- Read ---
var users = db.Users.ToList();
Console.WriteLine("【ユーザー一覧】");
foreach (var u in users)
{
Console.WriteLine($"{u.Id}: {u.Name} ({u.Email})");
}
// --- Update ---
var target = db.Users.First();
target.Email = "new_email@example.com";
db.SaveChanges();
Console.WriteLine("更新完了");
// --- Delete ---
db.Users.Remove(target);
db.SaveChanges();
Console.WriteLine("削除完了");
}
実行結果例
登録完了: 山田太郎
【ユーザー一覧】
1: 山田太郎 (taro@example.com)
更新完了
削除完了
これで、基本的なCRUD操作が実現できました。
LINQで柔軟な検索
EF CoreではLINQを使って簡単に検索ができます。
var result = db.Users
.Where(u => u.Name.Contains("田"))
.OrderBy(u => u.Id)
.ToList();
foreach (var u in result)
{
Console.WriteLine($"{u.Name} さん");
}
SQLを直接書かなくても、条件検索やソートを簡単に記述できます。
データベースファイルの確認
users.db
はSQLite形式なので、外部ツールで中身を確認できます。
おすすめツール:
- DB Browser for SQLite
- SQLiteStudio
これらを使えば、テーブル構造やデータをGUIで確認できます。
コードファースト開発の利点
EF Coreの大きな特徴は「コードファースト」開発です。
モデルクラス(Userなど)を変更してマイグレーションを実行すれば、データベース構造が自動的に更新されます。
例:カラム追加
UserクラスにAge
プロパティを追加し、以下を実行します。
dotnet ef migrations add AddAge
dotnet ef database update
これだけで新しいカラムがDBに追加されます。
まとめ
本記事では、
- Entity Framework Coreの概要
- SQLiteとの接続設定
- CRUD操作の実装
- LINQによる検索方法
を通して、C#で簡単にデータベースアプリを構築する方法を紹介しました。
SQLiteは軽量でインストール不要なため、学習や試作に最適です。
EF Coreを理解すれば、SQL ServerやMySQLなど他のDBにもスムーズに対応できます。