C# 使用实体框架仅从父表获取记录

C# 使用实体框架仅从父表获取记录,c#,performance,entity-framework,inheritance,table-per-type,C#,Performance,Entity Framework,Inheritance,Table Per Type,我的项目中有以下实体(儿童不止两个): 当我使用TPT策略进行继承时,是否可以使用EF仅从父表加载记录(),而不使用任何额外的联接 通过以下代码: var result = ctx.Parents.Find(5); //or var result = ctx.Parents.OfType<Parent>().Find(5); var result=ctx.Parents.Find(5); //或 var result=ctx.Parents.OfType().Find(5);

我的项目中有以下实体(儿童不止两个):

当我使用
TPT
策略进行继承时,是否可以使用
EF
仅从父表加载记录(),而不使用任何额外的联接

通过以下代码:

var result = ctx.Parents.Find(5);
//or
var result = ctx.Parents.OfType<Parent>().Find(5);
var result=ctx.Parents.Find(5);
//或
var result=ctx.Parents.OfType().Find(5);
EF
生成一个巨大的
SQL
查询!
(在我的真实模型中,我有两个以上的孩子)

无论您是查询
ctx.Parents
还是
ctx.Parents.OfType()
,您总是要求EF获取满足条件的所有
Parent
实体(
Id==5
)。EF无法预先知道这是子类型的还是非子类型的父实体(如果父实体不是抽象的,它可以这样做),因此它必须始终执行完整的查询


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

无论您查询
ctx.Parents
还是
ctx.Parents.OfType()
,您总是要求EF获取所有满足条件的
Parent
实体(
Id==5
)。EF无法预先知道这是子类型的还是非子类型的父实体(如果父实体不是抽象的,它可以这样做),因此它必须始终执行完整的查询


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

创建没有任何属性的新子类

[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 ;
}
公共父对象GetParent(Guid id)
{
var parent=ctx.Database.SqlQuery(“从父项中选择*,其中Id=@Id”,新的SqlParameter(@Id),Id)).FirstOrDefault();
以家长身份返回家长;
}

创建没有任何属性的新子类

[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 ;
}
公共父对象GetParent(Guid id)
{
var parent=ctx.Database.SqlQuery(“从父项中选择*,其中Id=@Id”,新的SqlParameter(@Id),Id)).FirstOrDefault();
以家长身份返回家长;
}

你累了吗
var result=ctx.Parents.Find(5)
@CodeNotFound:是的,结果没有什么不同。也许你必须看看SQL视图:)你累了吗
var result=ctx.Parents.Find(5)
@CodeNotFound:是的,结果没有什么不同。也许你必须看看SQL视图:)你建议哪种继承策略更适合查询模型?另外两种,TPH和TPC在这方面更好。你建议哪种继承策略更适合查询模型?另外两种,TPH和TPC在这方面更好。