Что такое Entity Framework и зачем он нужен?
Слышу про Entity Framework, EF Core, ещё какой-то EF6. Что это вообще и почему говорят, что с ним не нужно писать SQL? В чём разница между версиями?
2 ответа
Entity Framework (EF) — это ORM (Object-Relational Mapper) от Microsoft. Он связывает таблицы БД с классами C#, чтобы вы работали с данными как с обычными объектами, а SQL генерировался за вас.
Идея на примере. Описываете класс-сущность и контекст:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
}
И дальше пишете запросы на LINQ, а не на SQL:
using var db = new AppDbContext();
var adults = db.Users
.Where(u => u.Age >= 18)
.OrderBy(u => u.Name)
.ToList();
db.Users.Add(new User { Name = "Аня", Age = 25 });
db.SaveChanges();
EF сам переведёт это в SELECT ... WHERE Age >= 18 и INSERT.
Про версии:
- EF6 — старая, классическая версия, работает только на .NET Framework (Windows). Её ещё поддерживают для легаси-проектов, но в новых не используют.
- EF Core — современная кроссплатформенная переписанная версия для .NET Core / .NET 5+. Именно её берут в новых проектах.
Зачем нужен: меньше рутинного кода, типобезопасные запросы, миграции (версионирование схемы БД из кода). Минус — на сложных запросах сгенерированный SQL бывает неоптимальным, и тогда полезно понимать, что под капотом всё равно ADO.NET.
Коротко про выбор: если у вас новый проект на .NET 6/7/8 — однозначно EF Core. EF6 трогайте только если поддерживаете старое приложение на .NET Framework. И да, EF не отменяет знание SQL — наоборот, на проде вам почти наверняка придётся смотреть, какие запросы он реально шлёт в базу (через логирование), чтобы ловить N+1 и лишние выборки.