導入
前回はADO.NETで生のDB操作を体験しました。実務では毎回それを書くのは非効率なので、DBを「クラスとLINQだけ」で扱える**Entity Framework Core(EF Core)**が使われます。SQLを書かずにdb.Books.Where(b => b.Price >= 2000)がそのままDB検索になります。
図解
flowchart LR
CODE["LINQ<br/>db.Books.Where(...)"] --> EF["EF Core<br/>SQLに自動翻訳+結果をオブジェクトに復元"]
EF --> DB[("SQLite / SQL Server / PostgreSQL")]
進め方
- スターター
111-efcore/starter.zipを展開し、EfCoreLesson.slnを開く(EF Core + SQLite導入済み) Program.csのTODOを上から埋める- 期待される出力と照合する
学ぶこと
// エンティティ = テーブルに対応するクラス
public class Book { public int Id { get; set; } public string Title { get; set; } = ""; public int Price { get; set; } }
// DbContext = DBへの窓口
public class BookContext : DbContext
{
public DbSet<Book> Books => Set<Book>();
protected override void OnConfiguring(DbContextOptionsBuilder o) => o.UseSqlite("Data Source=books.db");
}
// 使う側
using var db = new BookContext();
db.Database.EnsureCreated();
db.Books.Add(new Book { Title = "C#入門", Price = 2400 });
db.SaveChanges(); // 保存(Create)
var found = db.Books.Where(b => b.Price >= 2000).ToList(); // 検索(Read・LINQ→SQL)
- エンティティ(クラス)=テーブル、
DbSet<T>=テーブルへの窓口、SaveChangesで確定 - 検索はLINQそのまま。EF Coreが裏でSQLに翻訳する
- テーブル定義の変更はマイグレーション(
dotnet ef migrations add)でコード管理できる - 検索は遅延実行:
ToList()の瞬間にSQLが飛ぶ(Whereを書き終えてからToListが効率的)
期待される出力
=== 2000円以上 ===
C#入門 (2400円)
実践DDD (3800円)
まとめ
- エンティティ=テーブル、
DbSet=窓口、SaveChangesで確定 - 検索はLINQのままSQLに翻訳される
- 変更履歴はマイグレーションでコード管理
次回: 自分がAPIを作る側になるASP.NET Core Web APIです。
テンプレート構成(教材制作用メモ)
111-efcore/
├── starter.zip # EF Core + SQLite導入済み / Program.cs(TODO 1〜5)
└── solution/Program.cs