猿教程 Logo

Entity Frameworklan显示加载

即使禁用了延迟加载,仍然可以延迟加载相关实体,但它必须通过显式调用完成。 使用DBEntityEntry对象的Load方法来完成此操作。

以下代码使用DbEntityEntry的Reference()方法显式加载特定学生的标准:

using (var context = new SchoolDBEntities())
{
    //Disable Lazy loading
    context.Configuration.LazyLoadingEnabled = false;
                
    var student = (from s in context.Students
                        where s.StudentName == "Bill"
                        select s).FirstOrDefault<Student>();
    context.Entry(student).Reference(s => s.Standard).Load();
}

如果你运行上面显示的代码,你可以看到它首先加载学生但不是标准,如下所示:


获取Standard实体的加载方法如下所示:


上面显示的代码将执行两个不同的数据库查询。 第一个查询获得Student,第二个查询获得Standard。


加载集合:

使用Collection()方法而不是Reference()方法加载集合导航属性。 以下示例加载学生的课程。

using (var context = new SchoolDBEntities())
{
    context.Configuration.LazyLoadingEnabled = false;
                
    var student = (from s in context.Students
                        where s.StudentName == "Bill"
                        select s).FirstOrDefault<Student>();
    context.Entry(student).Collection(s => s.Courses).Load();
}

注意:Load扩展方法的工作原理与ToList类似,只是它避免了完全创建列表。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/explicit-loading-with-dbcontext.html