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在这方面更好。