Что такое Entity Framework?

«Что такое Entity Framework?» — вопрос из категории Entity Framework, который задают на 36% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Entity Framework (EF) — это объектно-реляционный маппер (ORM) с открытым исходным кодом от Microsoft для платформы .NET. Он позволяет разработчикам работать с реляционной базой данных, используя объекты .NET, и минимизирует необходимость в написании низкоуровневого SQL-кода.

Основные концепции и возможности:

  • DbContext: Центральный класс, представляющий сессию работы с БД. Отслеживает изменения объектов, выполняет запросы и сохраняет данные.
  • DbSet: Представляет коллекцию сущностей (таблицу) в контексте.
  • LINQ to Entities: Позволяет писать строго типизированные запросы к БД на языке C#.
  • Трекинг изменений: EF автоматически отслеживает изменения в извлечённых объектах и генерирует соответствующие команды INSERT, UPDATE, DELETE при вызове SaveChanges().
  • Миграции: Механизм для инкрементального обновления схемы БД в соответствии с изменениями в моделях (Code First).
  • Поставщики данных: Поддержка SQL Server, PostgreSQL, SQLite, MySQL, Cosmos DB и других.

Пример (Code First подход):

// 1. Определяем модель (сущность)
public class Blog
{
    public int Id { get; set; } // Первичный ключ
    public string Url { get; set; }
    public List<Post> Posts { get; set; } // Навигационное свойство
}

// 2. Создаём контекст
public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; } // DbSet для таблицы Blogs
    public DbSet<Post> Posts { get; set; }
}

// 3. Используем
using (var db = new BloggingContext())
{
    // Запрос через LINQ
    var blogs = await db.Blogs
                        .Where(b => b.Url.Contains("tech"))
                        .Include(b => b.Posts) // Жадная загрузка связанных данных
                        .ToListAsync();

    // Добавление новой записи
    db.Blogs.Add(new Blog { Url = "http://example.com" });
    await db.SaveChangesAsync();
}

Подходы к разработке:

  1. Code First: Создание классов сущностей и генерация схемы БД из кода (рекомендуемый современный подход).
  2. Database First: Генерация классов сущностей и контекста из существующей базы данных.
  3. Model First (устарел): Проектирование модели в дизайнере EDMX и генерация кода и БД.