Что касается Discriminator в EF Core, есть ли способ установить базовый класс со всеми значениями? - PullRequest
2 голосов
/ 30 января 2020

Я хочу, чтобы при получении базового класса я получал все строки в таблице без учета дискриминатора. Я хочу использовать дискриминатор только при получении одного из производных классов. Как я могу выполнить sh это?

Первое, что я попробовал, было установить только HasValue для производных классов, но не базовый класс, как этот ...

modelBuilder.Entity<BaseClass>(entity =>
{
   entity.HasDiscriminator(e => e.DiscriminatorProperty)
     // .HasValue<BaseClass>()
     .HasValue<DerivedClass1>(1)
     .HasValue<DerivedClass2>(2);
});

. ... но это дает мне следующую ошибку:

Исключение типа 'System.InvalidOperationException' произошло в System.Private.CoreLib.dll, но не было обработано в коде пользователя: 'Тип сущности' BaseClass 'является частью иерархии, но не имеет настроенного значения дискриминатора.'

Еще одна вещь, которую я пытался настроить, - настроить BaseClass для каждого возможного значения дискриминатора, например: ...

modelBuilder.Entity<BaseClass>(entity =>
{
   entity.HasDiscriminator(e => e.DiscriminatorProperty)
     .HasValue<BaseClass>(1)
     .HasValue<BaseClass>(2)
     .HasValue<DerivedClass1>(1)
     .HasValue<DerivedClass2>(2);
});

... но при попытке получить базовый класс я получал только записи со значением дискриминатора, равным 1. Казалось, что EF Core распознает только первую конфигурацию и игнорирует следующую.

Итак мой вопрос, как я могу настроить дискриминатор специально для производных классов, но не для базового класса? Другими словами, при получении базового класса я должен получить все записи в таблице.

...