EF1:实体外键的位置,无需急于加载整个相关对象

时间:2011-01-19 16:20:27

标签: entity-framework linq-to-entities

很抱歉,如果这是一个非常愚蠢的问题,或者是否已在其他地方得到解答,但我找不到答案。

我希望能够通过相关实体的外键过滤实体列表,而无需使用.Include("ParentEntity")急切加载该实体。这对我来说似乎不是一个边缘情况,当我想要的是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基类到一堆其他实体:( - 所以我试图找到一个解决方法。

我发现this tip谈论伪造FK,但它暗示你不能在LINQ语句中使用伪造的属性。

我无法使用EF4,因为我坚持使用.net 3.5 sp1

谢谢大家。

更新

所以我已经为我的问题制定了一个解决方案,我所追求的是有人抨击我的头脑并告诉我这是一种非常荒谬的做事方式:)

    Parent parent = new Parent{Id = 1};
    _ctx.AttachTo("Parent",parent);
    parent.Children.Load();
    //This requirement wasn't in the original question, but I've included for reference 
    foreach (Child child in Parent.Children)
    {
        child.GrandChildReference.Load();
    }

    return from p in parent.Children
           select p;

1 个答案:

答案 0 :(得分:0)

你说:

  

这就是我想做的事情:

...并显示此代码:

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

你试过吗?这在EF 1中工作正常。不需要Include()