2

我创建了 TPH 代码优先 tmodel 并在所需的鉴别器列上添加了 NotMappedAttribute。我可以将 DbSets 添加到子类的上下文中,并通过这些类型的集合进行查询,代码优先仍然是我的朋友。

但是,假设我有一个实体,它本身包含 BaseType 的集合,其中一些可能是一种类型,而另一些可能是另一种。如何编写查询以获取键入的记录?顺便说一下,我不想在延迟加载的内存集合上这样做。

假设有一个名为 Association 的类和一些子类 AssocA 和 AssocB,它们都映射到 Associations 表并在 AssocationTypeId 上进行区分。现在假设您有一个实体 - 为了参数,将其称为 Employee。所以例如

class Employee
{
  public virtual Collection<Associations> MyAssociations {get;set;}
}

现在我想查询数据库以查找 AssocA = 的员工?我不希望任何关联都等于?但特定类型的关联。我不能使用 GetType,因为 LinqToEntities 不能使用它。我不能使用 AttributeTypeId 因为它在代码优先映射中使用。

我错过了什么?我的做法是合理的。但我无法建模。

4

1 回答 1

5

OfType运算符可能是您正在寻找的:

var query = from e in context.Employees
            where e.MyAssociations.OfType<AssocA>().Any()
            select e;

这只会找到至少有一个 type 关联的员工AssocA

于 2012-01-23T13:05:28.097 回答