我正在使用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实例”。