.Net Entity Framework 仅加载多对多 ID
.Net Entity Framework load many to many IDs only
我使用 EF,并且有一个多对多的关联 table。
我实现了明确创建关联 table,并引用了实体
Public class ModelContainer
{
[Required]
Guid Id {get; set;}
...
}
Public class ModelElement
{
[Required]
Guid Id {get; set;}
...
}
Class Container_Element
{
[Required]
Guid ContainerId {get; set;}
[Required]
Guid ElementId {get; set;}
ModelContainer Container {get; set;}
ModelElement Element {get; set;}
}
(并在数据库上下文中声明键和索引)
它确实工作正常。
但是对于特定查询,我想加载关联,但只加载 ID,我不想为实体消耗太多内存。
有没有办法从我的关联 table 加载,但只有 ContainerId/ElementId?
谢谢
默认情况下,从 DbContext 中的 DbSet 读取 Container_Element 时,如果您没有显式预加载相关实体,则只会将 ID 加载到内存中。
正如您在那里声明的那样,除非您使用 EF Core 5/6 /w proxy-less 延迟加载,否则导航属性将为 #null。但是,如果 DbContext 已经在跟踪内存中的相关实体,那么将设置这些引用,尽管这不会增加内存使用量,因为 EF 关联引用,它不会 return 同一实体的多个副本。
如果您将导航属性声明为 virtual
或使用 proxy-less 延迟加载,那么除非 DbContext 已经在跟踪实体,否则这些导航属性在访问之前不会被填充。
通常,从不需要所有 data/relationships 的实体图加载大量数据时,使用 Select
熟悉投影是一项很好的投资。 EF 可以构建仅 return 来自实体及其相关实体的特定列的查询,而无需 eager-loading 来自所有适用表的所有列的开销。
我使用 EF,并且有一个多对多的关联 table。
我实现了明确创建关联 table,并引用了实体
Public class ModelContainer
{
[Required]
Guid Id {get; set;}
...
}
Public class ModelElement
{
[Required]
Guid Id {get; set;}
...
}
Class Container_Element
{
[Required]
Guid ContainerId {get; set;}
[Required]
Guid ElementId {get; set;}
ModelContainer Container {get; set;}
ModelElement Element {get; set;}
}
(并在数据库上下文中声明键和索引)
它确实工作正常。
但是对于特定查询,我想加载关联,但只加载 ID,我不想为实体消耗太多内存。
有没有办法从我的关联 table 加载,但只有 ContainerId/ElementId?
谢谢
默认情况下,从 DbContext 中的 DbSet 读取 Container_Element 时,如果您没有显式预加载相关实体,则只会将 ID 加载到内存中。 正如您在那里声明的那样,除非您使用 EF Core 5/6 /w proxy-less 延迟加载,否则导航属性将为 #null。但是,如果 DbContext 已经在跟踪内存中的相关实体,那么将设置这些引用,尽管这不会增加内存使用量,因为 EF 关联引用,它不会 return 同一实体的多个副本。
如果您将导航属性声明为 virtual
或使用 proxy-less 延迟加载,那么除非 DbContext 已经在跟踪实体,否则这些导航属性在访问之前不会被填充。
通常,从不需要所有 data/relationships 的实体图加载大量数据时,使用 Select
熟悉投影是一项很好的投资。 EF 可以构建仅 return 来自实体及其相关实体的特定列的查询,而无需 eager-loading 来自所有适用表的所有列的开销。