请考虑以下情况:如何在实体框架中仅加载基类型
我有两个基类被另外两个类继承。 例如,我们将有:
class Base
{
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
当我请求基地实体与代码等
context.Base.Where(Q => q.Id == ID)。首先();
实体框架为每个派生实体生成一整套连接,这会导致查询的可接受性能低于下列值。 什么我想要的只是加载基本实体而不加入派生的。
我在这里找到的唯一解决方案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();
不适合我要么是由于不断增加的派生类型的量。
除了我提到的那些之外,是否还有其他可行的解决方案?
你认为什么是“低于可接受的性能”?我很好奇你为什么想要一个基类? – 2012-07-19 15:50:28
“*我想要的只是加载基本实体而不将它加入派生的实体*”:这是否意味着您只需要实体的基本*部分*,或者您只希望*为基本类型*的实体?对于后者,请记住,查询需要连接到派生类型的表中以确定实体是否为基本类型(基本上,如果连接的结果为空,则实体为基本类型,否则不是)。所以,你无法避免这种情况下的连接(这是TPT继承的价格)。如果你只想要基础*部分*投影可能是正确的方法。 – Slauma 2012-07-19 16:13:28