Sobes.tech
Back to questions
Junior — Middle
68

Можете объяснить, что такое дискриминатор в контексте Entity Framework и как он используется при работе с таблицами, содержащими иерархические данные?

Companies where asked
Элисофт

Answer from AI

sobes.tech AI

В Entity Framework дискриминатор — это специальное поле в таблице базы данных, которое используется для реализации наследования с помощью стратегии Table Per Hierarchy (TPH). Эта стратегия предполагает хранение всех типов из иерархии классов в одной таблице, а дискриминатор помогает отличать, к какому конкретному типу относится каждая запись.

Например, если у вас есть базовый класс Animal и производные Cat и Dog, то в таблице будет поле Discriminator, где для котов будет значение "Cat", а для собак — "Dog". EF использует это поле, чтобы при загрузке данных создавать объекты нужного типа.

Пример конфигурации в Fluent API:

modelBuilder.Entity<Animal>()
    .HasDiscriminator<string>("Discriminator")
    .HasValue<Cat>("Cat")
    .HasValue<Dog>("Dog");

Таким образом, дискриминатор позволяет эффективно работать с иерархическими данными в одной таблице, сохраняя информацию о конкретном типе каждой записи.