如何在EF Core中使用定义的图形加载实体



我在EF核心中加载实体时有一些问题,不确定我是否以错误的方式使用它,或者这是否是错误?

例如:

public class Root 
{
   public Contained ContainedReference { get; set; }
}
public class Contained 
{
   public Contained AnotherContainedReference { get; set; }
   public System.Collections.Generic.ICollection<Root> Roots { get; set; } //Backreference
}

我加载实体的代码如下:

    public override ICollection<Package> GetAll()
        {
            return Context.Set<Root>().Include(_=>_.ContainedReference);
        }       

在我的情况下,我想加载这些结构:root.ContainedReference

我得到的是:root.containedReference.AnotherContainedReference

我如何告诉EF核心应该加载词根,包括包含的重新,而不是包含的重新中的另一个重新反向?

如果我现在尝试更新(dbcontext.update(root((,它将失败,因为迭代时有一个循环。根和ef core会抛出

之类的东西。

无法跟踪实体类型" root"的实例,因为已经跟踪具有键值'{id}'的另一个实例。连接现有实体时,请确保仅附加具有给定键值的一个实体实例。

由于反应(包含的根,不应加载(

预先感谢您

chris

我想我在https://github.com/aspnet/entityframeworkcore/issues/11564

上找到了答案。

我只是清除了导航属性,现在它正在工作,但没有结束解决方案。也许他们会在不久的将来实施这样的功能。

最新更新