Index · In plain words
1 min readRapid overview
In plain words
EF Core does two jobs:
- The ORM —
db.Tenants.Where(...).First(), change tracking, navigation properties - The migrations —
dotnet ef migrations add,MigrateAsync()on startup
Microsoft ships both in one box, so they feel like one thing. They're not.
In Go, these two jobs are usually split into separate tools:
- Ent = both jobs in one tool (like EF Core).
- Atlas = only the migrations job. For querying the database, you pair it with another tool (most commonly sqlc, which generates Go code from SQL queries you write).
Car analogy
- Ent is buying a finished car — engine, wheels, transmission, all assembled. Drive away.
- Atlas is buying just the engine — you add the wheels and transmission yourself (sqlc, pgx, etc.). More flexible, more decisions.
Quick pick
| You want… | Pick |
|---|---|
| The EF Core feel in Go — one tool does everything | Ent |
| Just "no hand-written migrations", with plain SQL queries | Atlas + sqlc |
One-sentence version: Ent is "EF Core for Go." Atlas is "just the migrations part of EF Core, for Go."