Как запросить объекты по сущности, если более одной сущности получены из общей сущности и сохранены в одной таблице - PullRequest
0 голосов
/ 28 июня 2018

Допустим, у меня есть родительский класс с 2 подклассами со следующей конфигурацией:

modelBuilder.Entity<ParentType>(entity =>
{
   entity.HasDiscriminator()
         .HasValue<ChildA>("ChildA")
         .HasValue<ChildB>("ChildB");
}

Так как мне получить данные, основанные на дочернем типе?

var result = context.ParentTypes.
                    .Where(x => ...);

В таблице я вижу столбец с именем Discriminator со значениями, такими как ChildA и ChildB. Однако такого свойства на x.Discriminator.

нет

1 Ответ

0 голосов
/ 28 июня 2018

При написании запросов к конфигурации Entity Framework TPH (таблица на иерархию) можно использовать метод OfType<T> LinQ для фильтрации типов. Это также позволяет вам получить доступ к свойствам в этом производном классе. Например, если у нас был класс ChildA, подобный этому:

public class ChildA : ParentType
{
    public string FavouriteFood { get; set; }
}

Мы могли бы запросить это так:

var childAWhoLikeCheese = context.ParentTypes
    .OfType<ChildA>()
    .Where(x => x.FavouriteFood == "Cheese");

Это фактически создаст запрос примерно так:

SELECT ...
FROM ParentTypes
WHERE Discriminator = "ChildA"
AND FavouriteFood = "Cheese"
...