【发布时间】:2015-09-29 23:08:32
【问题描述】:
考虑以下情况:
我有另外两个继承的基类。 例如我们将有:
class Base
{
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
当我使用类似代码请求基本实体时
context.Base.Where(q => q.Id == id).First();
实体框架为每个派生实体生成一整套连接,导致查询性能低于可接受的水平。 我想要的是只加载基础实体而不将其加入派生实体。
我在这里找到的唯一解决方案是http://blogs.msdn.com/b/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspx。 但这对我不起作用。 EF 仍然会生成大量查询。
编写如下查询:
context.Base.Where(q => !(q is DerivedA) && !(q is DerivedB)).First();
不适合我,因为派生类型的数量不断增加。
除了我提到的之外,还有其他可能的解决方案吗?
【问题讨论】:
-
您认为什么是“低于可接受的性能”?我很好奇你为什么想要一个基类?
-
“我想要的是只加载基础实体而不将其加入派生实体”:这是否意味着您只想要基础 part实体或您只想要 是 基本类型的实体?对于后者,请记住,查询需要连接到派生类型的表中以确定实体是否属于基本类型(基本上如果连接的结果为空,则实体属于基本类型,否则不是)。因此,在这种情况下,您无法避免连接(这是 TPT 继承的代价)。如果您只想要基础 part 投影可能是正确的方法。
标签: c# entity-framework entity-framework-4 entity-framework-4.1