繁体   English   中英

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

[英]How to load Entities with an defined Graph in EF Core?

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

例如:

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 Core它应该加载包含ContainedReference的Root,而不要包含ContainedReference中的AnotherContainedReference?

如果我现在尝试更新(DBContext.Update(Root)),它将失败,因为在对Contained.Roots和EF Core进行迭代时存在一个循环

无法跟踪实体类型“ Root”的实例,因为已经跟踪了另一个键值为“ {Id}”的实例。 附加现有实体时,请确保仅附加一个具有给定键值的实体实例。

由于存在反向引用(Roots in Contained,因此不应加载)

先感谢您

克里斯

我想我在https://github.com/aspnet/EntityFrameworkCore/issues/11564找到了答案

我只是清除导航属性,现在它可以正常工作,但没有最终解决方案。 也许他们会在不久的将来实现这种功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM