【发布时间】:2012-01-08 11:19:56
【问题描述】:
我想我使用 TPT 继承。我有一个抽象父类和三个子类。我想要的是一个基本的查找功能,但我需要明确地做包含。我的问题是如何根据类型包含不同的属性。
public List<RandomObject> FindAll(int someProperty)
{
using (MyContext db = new MyContext())
{
var randomObjects = db.RandomObjects.Where(x => x.SomeProperty == someProperty);
}
}
RandomObject 的每个实例都有一个抽象超类的集合。有固定数量的已知子类(如果人们需要名称,我们可以称它们为 SubclassA 和 SubclassB)。
我一直在尝试诸如此类的各种 Include 语句
randomObjects = randomObjects.Include(x => x.Superclasses.OfType<SubclassA>().SubclassAOnlyProperty);
如果有任何需要澄清的地方,请告诉我,我绝对可以用我尝试过的各种东西来填写这篇文章。
【问题讨论】:
-
Include和继承不能很好地结合在一起。简单的建议是不要使用Include在单个查询中获取多个派生类型的关系,尤其是不要在 TPT 中使用Include(直到 .NET 4.5 发布)。 -
那么在延迟/急切加载方面我有哪些替代方案?我需要的数据是这个抽象子类的列表,这个数据包括几个特定于某些子类的关系。如何在不诉诸
Include的情况下检索此 TPT 数据?
标签: linq entity-framework linq-to-entities ef-code-first