EF核心显式忽略关系

时间:2018-08-09 08:06:38

标签: asp.net-core .net-core entity-framework-core asp.net-core-webapi

public class Unit
{
   Public int Id { get; set; }
   Public virtual ICollection<Element> Elements { get; set; }
}

public class Element
{
   public int Id { get; set; }
   public virtual Unit Unit { get; set; } 
}

我们使用API​​调用来获取所有具有相关Element的{​​{1}}。 像这样:

Unit

我们的期望是只有Context.Elements.Include(o => o.Unit); 个拥有Element。但是,Unit个也有Unit

Element

如何从{ "Id": 1, "Unit": { "Id": 1, "Elements":[...] } } 中排除Element

2 个答案:

答案 0 :(得分:1)

如果已在内存中加载了相关实体,则

EF Core将填充实体的导航属性。

Context.Element.Include(e => e.Unit) 

上面的行将加载内存中的所有Element实体,因此也会填充Unit.Elements

  

Entity Framework Core将自动修复导航属性   到先前已加载到上下文中的任何其他实体   实例。因此,即使您没有明确包括   导航属性,如果某些或   所有相关实体都是先前加载的。

EF Core 2.1现在支持延迟加载,这可能可以回答您的问题,但是,正如我上面提到的,在您的情况下,所有Elements都已加载到内存中。

Loading Related Data - Lazing Loading

答案 1 :(得分:0)

目前没有解决方案。

正如here所指出的,有一种解决方法:

Context.Elements.Include(o => o.Unit).Select(o => new Element()
{
  Id = o.Id,
  Unit = o.Unit
});