Index · In plain words

1 min read
11 min read
Rapid overview

In plain words

EF Core does two jobs:

  1. The ORMdb.Tenants.Where(...).First(), change tracking, navigation properties
  2. The migrationsdotnet 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 everythingEnt
Just "no hand-written migrations", with plain SQL queriesAtlas + sqlc

One-sentence version: Ent is "EF Core for Go." Atlas is "just the migrations part of EF Core, for Go."