仅使用Entity Framework从父表中获取记录

时间:2016-10-29 11:21:59

标签: c# performance entity-framework inheritance table-per-type

我的项目中有以下实体(孩子超过两个):

enter image description here

当我使用EF策略进行继承时,有没有办法从父表加载记录(没有任何额外的连接),使用TPT

通过以下代码:

var result = ctx.Parents.Find(5);
//or
var result = ctx.Parents.OfType<Parent>().Find(5);

EF会生成一个巨大的SQL查询! (在我的真实模型中,我有超过2个孩子)

2 个答案:

答案 0 :(得分:2)

无论您是在查询ctx.Parents还是ctx.Parents.OfType<Parent>(),都要求EF让符合条件的所有 Parent个实体(Id == 5,案件)。 EF无法预先知道这是一个子类型还是非子类型的Parent实体(如果Parent不抽象的话,它可能会这样),所以它总是必须执行完整查询。

TPT不是一个非常适合查询的模型。我不会使用它(并尽可能避免继承)。

答案 1 :(得分:0)

创建没有任何属性的新子类<​​/ p>

[Table("EmptyChild")]
public class EmptyChild: Parent
{

}

现在使用原始查询进行选择:

public Parent GetParent(Guid id)
{
    var parent = ctx.Database.SqlQuery<EmptyChild>("Select * from Parents where Id=@id", new SqlParameter("@id", id)).FirstOrDefault();

    return parent as Parent ;
}