实体框架.Include()导航到另一个导航属性

34

我有一个实体Test。它包含一个导航属性Question,而Question又包含一个导航属性QuestionLocale

var test = context.Tests
       .Include("Question")
       .FirstOrDefault();

正常工作。但如何包含QuestionLocale

3个回答

66
您可以使用以下代码来获取数据:

var test = context.Tests
                  .Include("Question.QuestionLocale")
                  .FirstOrDefault();

该代码用于检索数据并包含相关联的问题和本地化信息。

2
使用EntityFramework 4.1及更高版本,我相信在System.Data.Entity中有一个IDbSet扩展,您可以编写.Include(x => x.Question.QuestionLocale)。 - angularsen
1
@AndreasLarsen,关于.Include(x => x.Question.QuestionLocale)有具体的说明吗?我无法确定如何实现... - edobry
@edobry 添加一个using语句:System.Data.Entity,然后当您键入.Include()时,将会有lambda的重载。 - The Muffin Man
1
这个答案刚刚让我免去了数小时的头痛。非常感谢! - ZipionLive
太棒了。我浪费了几个小时才找到这个解决方案。 - magicandre1981

4
你也可以以强类型的方式完成它。
var test = context.Tests
                .Include(x => x.Question.Select(child => child.QuestionLocale))
                .FirstOrDefault()

4
现在有一个叫做ThenInclude的东西,详见微软文档,这帮我解决了问题。
var test = context.Tests.Include(x => x.Question).ThenInclude(q => q.QuestionLocale).FirstOrDefault();

但仅适用于EF Core,而非EF6(经典版)。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接