Ответ
Такой класс называется Сущность (Entity). В контексте Entity Framework Core (EF Core) сущность — это обычный класс CLR (POCO - Plain Old CLR Object), экземпляры которого отслеживаются контекстом данных (DbContext) и могут быть сохранены в базе данных.
Ключевые характеристики сущности:
- Сопоставление с таблицей: Каждый класс-сущность обычно соответствует одной таблице в БД. Сопоставление настраивается через
DbSet<T>в контексте, соглашения (conventions), атрибуты данных ([Table],[Column]) или Fluent API. - Свойства-столбцы: Открытые свойства с get/set обычно сопоставляются со столбцами таблицы.
- Ключ: Должно быть свойство, помеченное как первичный ключ (по соглашению — свойство с именем
Idили<ClassName>Id). - Навигационные свойства: Ссылки на другие сущности, определяющие связи (один-ко-многим, многие-ко-многим).
Пример сущности
// Класс-сущность, сопоставляемый с таблицей "Products"
public class Product
{
// Свойство-первичный ключ. По соглашению станет столбцом Id с автоинкрементом.
public int Id { get; set; }
// Простые свойства, сопоставляемые со столбцами.
public string Name { get; set; }
public decimal Price { get; set; }
public bool IsInStock { get; set; }
// Внешний ключ (соглашение: <NavigationPropertyName>Id).
public int CategoryId { get; set; }
// Навигационное свойство для связи "многие к одному" с сущностью Category.
public virtual Category Category { get; set; }
// Навигационное свойство для связи "один ко многим" с сущностью OrderItem.
public virtual ICollection<OrderItem> OrderItems { get; set; } = new List<OrderItem>();
}
// Регистрация сущности в контексте данных
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; } // DbSet представляет таблицу Products
public DbSet<Category> Categories { get; set; }
// ... другие DbSet
}
Отличие от других типов моделей
Важно не путать сущность с другими паттернами передачи данных:
- DTO (Data Transfer Object): Простой контейнер для данных, передаваемых между слоями приложения (например, из API контроллера в клиент). Не содержит бизнес-логики и поведения, часто является плоским (без сложных графов объектов).
- ViewModel: Класс, адаптированный для представления данных в UI (например, в MVC View или Razor Page). Может объединять данные из нескольких сущностей.
- Модель предметной области (Domain Model): Более широкое понятие, которое включает сущности, их поведение (методы) и бизнес-правила. В чистом виде сущность EF Core — это, прежде всего, модель данных для персистентности, но она может также содержать и доменную логику.
Практический совет: Для сложных сценариев часто используют отдельные классы для сущности (персистентность) и для доменной логики, применяя паттерны вроде Repository и Mapping (например, с помощью AutoMapper) для преобразования между ними.