Asp.net core EF核心显式忽略关系

Asp.net core EF核心显式忽略关系,asp.net-core,.net-core,entity-framework-core,asp.net-core-webapi,Asp.net Core,.net Core,Entity Framework Core,Asp.net Core Webapi,我们的期望是只有元素s会有单元。但是,单元s也有元素s Context.Elements.Include(o => o.Unit); 如何将元素从单元中排除?目前没有解决方案 如前所述,有一个解决办法: { "Id": 1, "Unit": { "Id": 1, "Elements":[...] } } 如果相关实体已加载到内存中,EF Core将填充实体的导航属性 Context.Elements.Include(o => o.Unit).Sel

我们的期望是只有
元素
s会有
单元
。但是,
单元
s也有
元素
s

Context.Elements.Include(o => o.Unit);

如何将
元素
单元中排除?

目前没有解决方案

如前所述,有一个解决办法:

{
  "Id": 1,
  "Unit": {
     "Id": 1,
     "Elements":[...]
  }
}

如果相关实体已加载到内存中,EF Core将填充实体的导航属性

Context.Elements.Include(o => o.Unit).Select(o => new Element()
{
  Id = o.Id,
  Unit = o.Unit
});
上面的行将加载内存中的所有
Element
实体,因此它也将填充
Unit.Elements

实体框架核心将自动修复导航属性 到以前加载到上下文中的任何其他实体 例如。因此,即使您没有明确地包含 导航属性,如果某些或 以前加载了所有相关实体

EF Core 2.1现在支持延迟加载,这可能会回答您的问题,但是,正如我前面提到的,在您的例子中,所有
元素都已加载到内存中


1个单元可以有0个或多个元素。但元素必须有一个单元才能存在/创建。不能从单元中排除元素。这就是它的工作原理
Context.Elements.Include(o => o.Unit).Select(o => new Element()
{
  Id = o.Id,
  Unit = o.Unit
});
Context.Element.Include(e => e.Unit)