【发布时间】:2021-10-21 23:25:41
【问题描述】:
我有一个关于 EF Core 中的延迟加载和急切加载的问题。我研究了一下,发现默认情况下没有启用延迟加载,因为你必须确定你需要它。问题是我是否需要它。为此,我想举一个小例子:
public class Model
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Model> SubModel { get; set; }
public ICollection<Property> Properties { get; set; }
}
public class Property
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public Model ParentModel { get; set; }
}
我基本上有这两个实体。例如,模型类有一个模型列表,因此是一种自引用关系。一个模型可以有一个模型列表,也可以有模型列表等等。关系的深度是用户定义的。所以从代码的角度来看,我无法判断这个“树”有多深。我尝试使用的是 Include 和 ThenInclude 但那是静态的方式。然后我尝试了这种延迟加载的方法,基本上解决了这个问题,但是很多人说你应该只在特定情况下使用延迟加载。在我不知道存在多少嵌套关系的情况下使用延迟加载会是这种情况吗?
【问题讨论】:
-
您忘了告诉您要实现的目标,但从我读到的内容来看,延迟加载在这里非常好。您需要递归查询的一种或另一种方式。除非你总是一次得到整棵树。然后你就可以得到所有的
Models,包括Properties,剩下的就是EF的关系修复。 -
你是对的!这样做的目标是在可以在业务流程建模中使用的对象建模场景中使用它。用户可以定义模型,例如发票。例如,发票有一个 SubModel 客户,该客户具有属性,还可以具有嵌套模型,这些模型更详细地描述了客户的组件。目标是检索此模型的特定部分。例如,我只想要客户模型而不是发票模型和属性等。
-
并不是说我喜欢延迟加载,但它可能在这里很有用。另一种方法是递归加载子模型。但这太基于意见了。
标签: asp.net-core entity-framework-core lazy-loading eager-loading