.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 来自所有适用表的所有列的开销。