Definicja #
Entity Framework (EF) to narzędzie ORM (Object-Relational Mapping) firmy Microsoft dla platformy .NET, które upraszcza operacje na relacyjnych bazach danych. Zamiast pisać surowe zapytania SQL, programista operuje na obiektach C# — EF tłumaczy te operacje na SQL automatycznie.
EF jest analogiem dla .NET tego, czym Hibernate jest dla Javy. Entity Framework Core to nowoczesna, wieloplatformowa wersja działająca na .NET Core i .NET 5+, wspierająca wiele baz danych (SQL Server, PostgreSQL, MySQL, SQLite, Oracle).
Kluczowe podejścia do modelowania:
- Code First — programista definiuje klasy C# (encje), a EF generuje schemat bazy danych przez migracje. Najczęściej stosowane podejście w nowych projektach.
- Database First — EF generuje klasy C# na podstawie istniejącego schematu bazy danych (scaffolding)
- Model First — podejście przestarzałe, projektowanie w designerze wizualnym
Najważniejsze mechanizmy EF Core:
- DbContext — centralny obiekt reprezentujący sesję z bazą danych; zawiera DbSet<T> dla każdej encji
- LINQ-to-Entities — zapytania pisane w C# (Where, Select, Include, GroupBy) tłumaczone na SQL
- Migracje — wersjonowanie schematu bazy danych (
Add-Migration,Update-Database) - Lazy/Eager Loading — kontrola nad ładowaniem powiązanych encji (Include, ThenInclude)
- Change Tracking — automatyczne śledzenie zmian i generowanie UPDATE
Zastosowania #
Entity Framework stosuje się do:
- Aplikacji ASP.NET Core z relacyjną bazą danych — CRUD, transakcje, relacje jeden-do-wielu i wiele-do-wielu bez pisania SQL
- Wersjonowania schematu bazy danych — migracje Code First pozwalają na kontrolowane zmiany schematu w CI/CD
- Szybkiego prototypowania aplikacji — Code First z automatycznym tworzeniem tabel przyspiesza starty projektów
- Aplikacji z wieloma dostawcami baz danych — ten sam kod EF Core działa z SQL Server, PostgreSQL i SQLite (np. dev vs prod)
- Raportowania i analityki — złożone zapytania LINQ z projekcjami, grupowaniem i agregacjami bez opuszczania C#
Ścieżka nauki #
Entity Framework Core jest jednym z najpopularniejszych ORM dla .NET — niezbędna wiedza dla większości .NET developerów.
Zacznij od:
- Instalacja:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer - Tworzenie pierwszego DbContext i klasy encji (modele C#)
- Podejście Code First: migracje (
Add-Migration InitialCreate,Update-Database) - Podstawowe operacje CRUD:
DbContext.Add(),SaveChanges(),Find(),Remove() - Zapytania LINQ:
Where,FirstOrDefault,Include(eager loading)
Następnie pogłębiaj:
- Konfiguracja relacji:
HasOne,HasMany,WithMany— Fluent API vs Data Annotations - Optymalizacja zapytań:
AsNoTracking(), projekcje (Select), unikanie N+1 - Transakcje i
IDbContextFactoryw aplikacjach wielowątkowych - Wzorzec Repository i Unit of Work z EF Core
- Alternatywy: Dapper (micro-ORM, surowy SQL), NHibernate — kiedy używać czego
FAQ #
- Czym różni się Entity Framework od Dappera?
- Entity Framework to pełny ORM — automatycznie generuje SQL z LINQ, śledzi zmiany obiektów i zarządza relacjami. Dapper to micro-ORM — wykonuje surowe zapytania SQL i mapuje wyniki na obiekty C#. EF jest wygodniejszy i szybszy w developmencie, Dapper daje pełną kontrolę nad SQL i jest wydajniejszy przy złożonych zapytaniach.
- Czym różni się EF 6 od EF Core?
- Entity Framework 6 to stara wersja działająca tylko na .NET Framework (Windows). EF Core to przepisana od nowa, wieloplatformowa wersja dla .NET Core i .NET 5+, wspierająca PostgreSQL, MySQL, SQLite i inne bazy. Nowe projekty zawsze powinny używać EF Core.
- Co to jest problem N+1 w EF Core?
- Problem N+1 polega na wykonaniu 1 zapytania do pobrania listy encji, a następnie N zapytań dla każdej encji po powiązane dane. W EF Core rozwiązuje się go przez Include() (eager loading) lub projekcje Select() zamiast ładowania całych encji z lazy loadingiem.
- Ile zarabia .NET Developer znający EF Core?
- EF Core to standardowa umiejętność .NET developera — wymagana w większości ofert pracy. Mid .NET Developer zarabia w Polsce od 10 000 do 18 000 zł brutto, senior od 18 000 do 30 000 zł. Sama znajomość EF Core nie wyróżnia kandydata, ale jej brak jest dyskwalifikujący.
- Czy EF Core generuje wydajne zapytania SQL?
- EF Core generuje przyzwoite zapytania SQL dla typowych operacji, ale złożone przypadki mogą wymagać optymalizacji. Narzędzia diagnostyczne: logowanie SQL (LogTo), profiler bazy danych. Przy wydajnościowo krytycznych zapytaniach warto użyć surowego SQL przez FromSqlRaw() lub przejść na Dapper.