EF Core Basics
DbContext, Migrations, Change Tracker, Relationships e o padrao Unit of Work do Entity Framework Core
Conceito central:
DbContext e simultaneamente um Unit of Work e um Repository. Ele rastreia mudancas e gera SQL automaticamente no SaveChanges. Change Tracker β estados de uma entidade
Toda entidade rastreada pelo DbContext esta em um dos 5 estados. O SaveChanges gera SQL baseado nessas transicoes.
| Estado | O que significa | SQL gerado no SaveChanges |
|---|---|---|
| Detached | Nao rastreado pelo contexto | Nenhum |
| Added | Novo, sera inserido | INSERT |
| Unchanged | Lido do banco, sem alteracoes | Nenhum |
| Modified | Propriedade alterada | UPDATE (so colunas modificadas) |
| Deleted | Marcado para remocao | DELETE |
Abordagens: Code-First vs Database-First
| Aspecto | Code-First | Database-First |
|---|---|---|
| Fonte de verdade | Classes C# | Schema do banco |
| Migrations | Geradas a partir do modelo | Scaffold com dotnet ef dbcontext scaffold |
| Quando usar | Projetos novos (greenfield) | Banco existente (brownfield) |
| Vantagem | Controle total do modelo, versionado em Git | Reusa schema existente sem reescrita |
Qual o lifetime correto do DbContext?
DbContext deve ser Scoped β um por request HTTP. Ele nao e thread-safe. AddDbContext ja registra como Scoped por padrao. Em background services (Singleton), use IDbContextFactory ou IServiceScopeFactory para criar instancias por operacao. Nunca use Singleton β o change tracker acumula entidades e consome memoria.