我的数据库和EF映射中有两个表(toggle_next = Toggle(label='Toggle Next', button_type='success')
def update_next():
"""This function shows the next 10 points in the data"""
toggle_next.on_click(update_next)
和Teacher
):
Course
我加载了这样的老师:
public partial class Teacher
{
public long Id { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
现在有时我想为我的老师加载课程列表。所以我改变了这样的实现:
public Teacher GetTeacher(long id)
{
using(var entities = new MyEntities())
{
var teacher = entities.Teachers.Where(t => t.Id == id).FirstOrDefault();
return teacher;
}
}
这很好用。但在那之后,我决定关闭LazyLoading for Courses属性,因为我决定通过public Teacher GetTeacher(long id, bool loadCourses)
{
using(var entities = new MyEntities())
{
var teacherQuery = entities.Teachers.Where(t => t.Id == id);
if(loadCourses)
{
teacherQuery.Include(t => t.Courses);
}
return teacherQuery.FirstOrDefault();
}
}
字段手动控制它。
所以我刚从课程集合中删除了loadCourses
:
virtual
这确实有助于关闭LazyLoading,但public ICollection<Course> Courses { get; set; }
停止工作,我的Include
集合从未加载。
所以问题是:是否可以在禁用LazyLoading的情况下为Courses
集合进行急切加载?
P.S。我实际上并没在我的应用程序中使用实体对象,而是将它们转换为我的Domain对象。这就是为什么我决定使用Courses
字段而不是实际使用LazyLoading。
另外,我想将一个SELECT查询(当然是JOIN)发送到数据库而不是两个单独的SELECT。
答案 0 :(得分:1)
在提出问题后不久,我找到了一个简单明了的答案:if(loadCourses)
下有一个我没有分配teacherQuery
的错误。固定代码看起来像这样,工作正常:
if(loadCourses)
{
teacherQuery = teacherQuery.Include(t => t.Courses);
}
还想提一下@VidmantasBlazevicius提供的useful link。它包含virtual
关键字如何影响您的实体的答案。