我在理解实体框架5中的延迟加载时遇到问题。我理解在使用延迟加载时,直到请求时才会加载相关实体:
使用延迟加载时,初始查询只引入目标实体集。但是,每当访问导航属性时,就会对存储发出另一个查询以加载相关实体。(引用)
我有一个包含两个类的ASP.NET Web API项目:
public class Farm
{
public int FarmId { get; set; }
public virtual ICollection<LandUnit> LandUnits { get; set; }
...
}
public class LandUnit
{
public int LandUnitId { get; set; }
...
}
我将LazyLoadingEnabled设置为true,并使我的POCO类符合指南(参考),但当我使用scaffolding创建FarmController并通过fiddler调用它时,它显示:
JSON
{}
...
LandUnits
{}
...
如果我设置LazyLoadingEn的=false,那么我得到:
JSON
{}
...
LandUnits=(null)
我是不是误解了懒惰加载的基本原理?在我看来,正在发生的事情与定义所说的相反。当延迟加载关闭时,相关实体将不加载。当开启延迟加载时,将加载相关实体。
这只是表明你还没有请求任何LandUnits(如果你循环通过他们使用的东西,如Foreach,他们将被加载)。因此,当使用延迟加载时,JSON对象是空的。
禁用延迟加载时,LandUnits对象为空,因为LandUnits尚未加载,以后无法加载(尝试加载会引发错误)
这是预期的行为。当JSON序列化程序对类型进行序列化时,它将枚举LandUnits
导航属性,这当然会从数据库中调用该集合的延迟加载。
当您关闭延迟加载时,您的导航属性仍将设置为默认值,如图所示,因为实体框架不会生成任何代理类型。
我建议关闭延迟加载,并急切地(使用包含
方法)或明确加载(使用加载
方法)相关数据,以确保您不会无意中加载不需要的数据。
在使用默认JSON序列化程序时,您还应该注意循环依赖关系问题。
我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语
我在一个JavaSE项目中使用EclipseLink作为JPA提供者。我已经正确地配置了编织,以允许延迟加载。 与HiberNate(抛出LazyPresalizationExctive)不同,Eclipse Link可以获得LAZY关系的代理,即使是在封闭的实体管理器中。要运行此查询,它从池中获得一个新连接。 是否存在禁用或更改此功能行为的设置?在尝试访问未加载的属性(如Hibernate)时,
我试图在primefaces数据表设置中实现延迟加载。目前,在没有延迟加载实现的情况下,这是可行的,但是在实现延迟加载后,我在datatable中没有得到任何数据。但是,我可以在我的LoadData方法中打印我的列表,以验证数据是否正在加载到我的列表中,但一旦返回我的LazyModel并尝试加载datatable,似乎就会出现问题。这可能只是我忽略的一些简单的事情。非常感谢您的帮助! 这是我的屏幕
我已经阅读了本教程和这篇文章,但我不明白每种加载类型的确切用途。 我解释 我有这个POCO: 我明白这一点: > 对于懒惰加载:因为加载是懒惰的,如果我调用dbset将不会加载所有导航属性。这种类型的加载在性能和响应性方面是最好的。默认情况下启用它,如果我想重新启用它,我必须设置: 对于即时加载,它不是懒惰的:当我加载dpc\u-gestion时,它加载了所有导航属性。可以使用方法加载导航属性。要
考虑以下(非常简化的)实体: 在我的映射器中,我可以设置用户罚款,但是一旦执行以下代码(在数据库中保留任何更改之前)
我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。