我刚开始进行一些实体框架探索,我认为现在是时候看看每个人都抱怨了什么。我遇到的问题是实体似乎没有返回任何对象上下文。我从一个数据库生成了模型,该数据库有三个相互链接的表。
Courses
Instructors
CanTeach
关系正如您所期望的那样:课程可以与多个CanTeach实体相关,教师也可以与多个CanTeach实体相关。我还为我的项目添加了OData服务,该服务也使用了相同的模型。所以我可以运行像
这样的查询from a in CanTeach
where a.Instructor.FirstName == "Barry"
select new { Name = a.Instructor.FirstName + " " + a.Instructor.LastName,
Course = a.Course.Name}
使用LINQPad对OData端点没有问题。但是,当我做一个简单的查询,如
public Instructor GetInstructorFromID(int ID)
{
return context.Instructors.Where(i => i.ID == ID).FirstOrDefault();
}
CanTeach列表为空。我知道EF中的所有内容都是延迟加载的,当我查看对象上下文时,我的上下文可能超出了范围,但是即使在查询运行时尝试获取对象上下文也会导致空对象上下文。
我做错了什么?
修改
除了下面的答案,我发现
return context.Instructors.Include("CanTeach").Where(i => i.ID == ID).FirstOrDefault();
适合那些寻求更流畅API的人。
答案 0 :(得分:0)
查找“包含”一词
from a in CanTeach.Include("Instructors")
where a.Instructor.FirstName == "Barry"
select new { Name = a.Instructor.FirstName + " " + a.Instructor.LastName,
Course = a.Course.Name}