使用 LINQ 查询存储在基础 class 表中的具体 classes

Using LINQ to query concrete classes stored in base class tables

我刚刚开始了解 LINQ 查询。我看过 MSDN page about type relationships,了解查询的基本原理。但是,当 EF6(代码优先)基于基础 class.[= 将多个具体的 class 合并为一个 table 时,我找不到任何可以帮助我查询的内容。 20=]

我有一个基础摘要 class 声明如下:

public abstract class Product
{
    // a whole bunch of fields, properties, and methods
}

然后是一堆具体的 classes 声明如下:

public class ProductOption : Product
{
    public ProductOption()
    {
        // A bunch of stuff to set properties in the base class.
    }
}

Entity Framework 创建一个名为 Products 的单个 table,它有一个名为 Differentiator 的列,其值标识具体行的名称 class成立(例如 ProductOption)。该列不会在 Product.

中创建 属性

我想做的是(按照 MSDN 示例)声明如下内容:

var queryAllProductOptions = from po in ProductOptions
                             select po;

我至少从一个人那里听说我需要过滤,看起来像这样(幸运的是我们有一个 属性 可以提供帮助):

var queryAllProductOptions = from po in Products
                             where po.Category = ProductCategory.Option
                             select po;

能够使用第一种方法的意义重大。我们有一个解决方法,但在某些情况下它可能会导致并发症(尽管 none insurmountable)。

第一种方法是否有效,或者我们是否需要按照第二种方法概述的方式过滤产品?

我认为你这里有的是 TPH 继承。 在 TPH 映射中查询类型是这样的:

var query =
    from lodge in context.Lodgings.OfType<Resort>()
    select lodge;

摘录自编程 entity framework 第 392 页

那么你考虑过 OfType 了吗?