1

假设我有一个包含 2 个子类的父类,配置如下:

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

那么如何根据子类型拉取数据呢?

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

在表中,我看到一个名为Discriminator值的列,例如ChildAChildB。但是,在 上没有这样的属性x.Discriminator

4

1 回答 1

0

在针对 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"
于 2018-06-28T00:02:19.177 回答