1

Let's say I have a parent class with 2 sub-classes, with the following configuration:

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

So how do I pull the data based on the child type?

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

In the table, I see a column called Discriminator with values, such as ChildA and ChildB. However, there's no such property on x.Discriminator.

DavidG
  • 113,891
  • 12
  • 217
  • 223
Richard77
  • 20,343
  • 46
  • 150
  • 252

1 Answers1

0

When writing queries against a TPH (Table per Hierarchy) Entity Framework configuration, you can use the OfType<T> LinQ method to filter the types. This also lets you access the properties in that derived class. For example if we had a ChildA class like this:

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

We could query like this:

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

This will actually create a query something like this:

SELECT ...
FROM ParentTypes
WHERE Discriminator = "ChildA"
AND FavouriteFood = "Cheese"
DavidG
  • 113,891
  • 12
  • 217
  • 223