当前位置: 首页 > 知识库问答 >
问题:

EF中的懒惰加载不起作用

壤驷阳冰
2023-03-14

我还有以下两个类,它们是由我的测试模型生成的:

public partial class House
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public House()
    {
        this.Persons = new HashSet<Person>();
    }

    public int id { get; set; }
    public string street { get; set; }
    public string city { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Person> Persons { get; set; }
}


public partial class Person
{
    public int id { get; set; }
    public string namen { get; set; }
    public int house { get; set; }

    public virtual House House1 { get; set; }
}

在DBContext的构造函数中,我显式启用了延迟加载,甚至不需要:

        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = true;

后来我打电话给房子列表:

        YardEntities cx = new YardEntities();
        IList<House> hl = cx.Houses.ToList<House>();
        House h = hl[0];
        ///**************BREAKPOINT*******************///
        Person g = h.Persons.First<Person>();
        output = g.namen;

在标记的断点之后,我预期,由于延迟加载,与房屋相关联的所有人员此时都不会加载。我没有访问一个人,为什么要加载他们?但是它们被加载,因为我的调试器向我显示了所有的name属性。

有人能解释一下这种行为吗?为什么惰性加载不起作用?

共有2个答案

周健
2023-03-14

如果我不使用tolist():

        DbSet<House> hl = cx.Houses;
        House h = hl.FirstOrDefault<House>();

H包含所有人员,即使启用了延迟加载。我猜阿文斯的回答一定是真的。当我想查看所有值时,调试器会加载它们。但是有办法证明他的猜测吗?

夔学智
2023-03-14

我没有访问一个人,所以为什么要加载它们?

你是对的。懒惰加载不会加载任何关系,除非你想访问它们。

但是它们被加载,因为我的调试器向我显示了所有的name属性。

实际上,这里调试器想要访问它们,所以延迟加载将完成这项工作并从数据库中获取它们。

 类似资料:
  • 我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语

  • 我试着把我的头绕到相对较新的img属性“加载”上。 我知道,如果img具有load=“lazy”属性,那么它会告诉支持该属性的浏览器,在接近视口时可以加载该属性。 那么为什么不总是设置loading=“lazy”?那些立即出现在屏幕上的图像无论如何都会被渲染,因为它们已经在视口中了。因此,在这种情况下,基本上忽略了load=“lazy”。 在这个演示https://mathiasbynens.be

  • 我试图在primefaces数据表设置中实现延迟加载。目前,在没有延迟加载实现的情况下,这是可行的,但是在实现延迟加载后,我在datatable中没有得到任何数据。但是,我可以在我的LoadData方法中打印我的列表,以验证数据是否正在加载到我的列表中,但一旦返回我的LazyModel并尝试加载datatable,似乎就会出现问题。这可能只是我忽略的一些简单的事情。非常感谢您的帮助! 这是我的屏幕

  • 我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。 为什么不工作是懒惰加载? 谢谢

  • 我谷歌了很多,这是真的奇怪的Spring Boot(最新版本)可能没有懒惰加载是不工作的。以下是我的代码片段: 我的资源: 我的服务: 编辑2: 对于规范构建,我有:

  • 我正在使用Springjpa和龙目岛来定义爪哇豆主题。每个主题都会有很多评论。我的一吨配置是 我创建的restful api是这样的。序列化似乎是问题所在,它总是获取注释。正如Chris所说,我添加了,它似乎解决了问题。但是如果我想加载注释怎么办,不会返回序列化中的注释。