如果我添加Where子句,实体框架包含将延迟加载

时间:2015-12-15 16:35:04

标签: c# entity-framework-6

我正在使用EF 6.1.3。我的原始任务是查询返回所有文章,标签和章节以及章节段落。我此查询,它运行正常:

using (SuaContext context = new SuaContext())
{
    var ret = (
        from x in context.Articles
            .Include(y => y.Sections.Select(z => z.Paragraphs))
            .Include(y => y.Tags)
        select x
    ).ToList();
    return ret;
}

消费代码可以访问所有子孙导航属性数据,我很高兴。

但我不再需要所有文章,我只想要包含特定标签的文章。具有连接表的关系是多对多的。 Article > ArticleToTag < ArticleTag。所以我添加了这两行:

using (SuaContext context = new SuaContext())
{
    var ret = (
        from x in context.Articles
            .Include(y => y.Sections.Select(z => z.Paragraphs))
            .Include(y => y.Tags)
        from t in x.Tags                      // Added this
        where t.ArticleTagType == specificTag // And this
        select x
    ).ToList();
    return ret;
}

如果我打破return ret,一切看起来都是正确的。也就是说,如果我仍在使用块内观察变量,则会评估子孙导航属性。在观察完所有属性之后,我可以使用F5并且我的所有代码都能正常工作。

但是如果我不在这里手动观察属性,那么当消费者试图访问这些属性时,消费代码会抛出可怕的ObjectExposedException“已经处理了ObjectContext实例”。

0 个答案:

没有答案