Что такое сущность в Entity Framework?

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

Ответ

В Entity Framework (EF) сущность (Entity) — это обычный класс CLR (POCO), который представляет бизнес-объект и напрямую сопоставляется с таблицей (или представлением) в базе данных. Каждый экземпляр сущности соответствует строке в этой таблице.

Ключевые характеристики сущности:

  • Идентичность: Имеет уникальный ключ (обычно свойство Id или составной ключ), который EF Core использует для отслеживания.
  • Отслеживание изменений: Экземпляры, извлеченные в контекст (DbContext), отслеживаются на предмет изменений для последующей генерации операторов INSERT, UPDATE, DELETE.
  • Связи: Может навигационными свойствами определять связи с другими сущностями (один-ко-многим, многие-ко-многим).

Пример базовой сущности:

public class Blog // Сущность, сопоставленная с таблицей "Blogs"
{
    // Свойство первичного ключа (по соглашению)
    public int Id { get; set; }

    // Простые свойства (сопоставляются со столбцами)
    public string Url { get; set; }
    public int Rating { get; set; }

    // Навигационное свойство (связь "один ко многим" с Post)
    public ICollection<Post> Posts { get; set; }
}

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    // Свойство внешнего ключа и навигационное свойство
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

Отличие от DTO/ViewModel: Сущность содержит логику предметной области и состояние для сохранения, в то время как DTO — это простой контейнер для передачи данных, не привязанный к контексту EF.