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

时间:2019-07-30 13:25:27

标签: c# entity-framework-core

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

例如:

```{r, output = 'asis', echo=FALSE, results = 'asis'}
D <- data.frame(matrix(ncol = 3,nrow = 5))
names(D)[names(D) == "X1"] <- "Word"
names(D)[names(D) == "X2"] <- "Meaning"
names(D)[names(D) == "X3"] <- "Source"
D$Word <- rbind("hello", "hellohello", "hellohellohello", "hellohellohellohello", "hellohellohellohellohello")
D$Meaning <- rbind("world", "worldworld", "worldworldworld", "worldworldworldworld", "worldworldworldworldworld")
D$Source <- rbind("","","","", "This is a source.")
D[D == ""] <- NA

for (i in 1:length(D$Meaning)){
cat(paste("**",D$Word[i],"**","\n",":  ", 
D$Meaning[i],"\n", sep = ""))

}
```

我的用于加载实体的代码如下:

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
}


在我的情况下,我想加载以下结构: Root.ContainedReference

我得到的是: Root.ContainedReference.AnotherContainedReference

我如何告诉EF Core它应该加载包含ContainedReference的Root,而不要加载ContainedReference中的AnotherContainedReference?

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

  

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

由于反向引用(包含的根目录,不应加载)

提前谢谢

克里斯

1 个答案:

答案 0 :(得分:0)

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

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