我的项目中有以下实体(孩子超过两个):
当我使用EF
策略进行继承时,有没有办法从父表加载记录(没有任何额外的连接),使用TPT
?
通过以下代码:
var result = ctx.Parents.Find(5);
//or
var result = ctx.Parents.OfType<Parent>().Find(5);
EF
会生成一个巨大的SQL
查询!
(在我的真实模型中,我有超过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 ;
}