Entity framework EF1:在实体的外键上,无需急于加载整个相关对象

Entity framework EF1:在实体的外键上,无需急于加载整个相关对象,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,很抱歉,如果这是一个非常愚蠢的问题,或者如果它已经在其他任何地方得到了回答,但我很难找到答案 我希望能够通过相关实体的外键筛选实体列表,而不必使用.Include(“ParentEntity”)立即加载该实体。在我看来,这不像是一个边缘案例,当我想要的只是FK时选择一个完整的对象,FK是隐藏的——当执行生成的SQL时,它甚至在返回的数据中 这就是我想做的: from s in EfContext.Child where s.Parent.Id == 1 select s; 这就是我要做的: f

很抱歉,如果这是一个非常愚蠢的问题,或者如果它已经在其他任何地方得到了回答,但我很难找到答案

我希望能够通过相关实体的外键筛选实体列表,而不必使用
.Include(“ParentEntity”)
立即加载该实体。在我看来,这不像是一个边缘案例,当我想要的只是FK时选择一个完整的对象,FK是隐藏的——当执行生成的SQL时,它甚至在返回的数据中

这就是我想做的:

from s in EfContext.Child
where s.Parent.Id == 1
select s;
这就是我要做的:

from s in EfContext.Child
.Include("Parent")
where s.Parent.Id == 1
select s;
现在,您可能认为这没什么大不了的,但当您处理实体框架继承实现这一垃圾时,如果您要包含的实体是一组其他实体的基类,那么Include语句将生成数百行SQL:(-所以我正在尝试找到一种解决方法

我发现其中提到了伪造FK,但它表明不能在LINQ声明中使用伪造的属性

我也不能使用EF4,因为我一直使用.NET3.5SP1

谢谢大家

更新:

所以我为我的问题找到了解决办法,我要找的是有人打我的头,告诉我这是一种完全荒谬的做事方式:)

你说:

这就是我想做的:

from s in EfContext.Child
where s.Parent.Id == 1
select s;
。。。并显示此代码:

from s in EfContext.Child
where s.Parent.Id == 1
select s;

你试过了吗?这在EF 1中运行良好。不需要
Include();这就是你在凌晨3点试图解决问题的结果。我遇到的问题是,枚举返回对象的视图试图访问父对象的Id,当然无法导航到父对象,因为除非.Include()它,否则它不存在。不使用.Include()引用父对象ID(用于筛选)的最佳方法是什么?也许是AlexJ使用EntityKey(我在最初的愚蠢问题中引用了EntityKey)的技巧7?我解决这个问题的方法是创建一个专用的视图模型,其中包含一个平面类型的视图所需的所有数据,然后在L2E查询中投影到该类型。这总是有效的(同样,不需要
Include()
needed),并产生最佳的SQL。