实体框架中的多对多关系会导致无限循环

Nil*_*zor 5 .net linq entity-framework

我在SQL Server中有一个具有多对多关系的数据模型.当Entity Framework模拟这种关系时,它通过创建一个双向列表引用来实现这一点,如下所示:

public class Class1
{
    public ICollection<Class2> Class2s {get;set;}
}

public class Class2
{
    public ICollection<Class1> Class1s {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,在某些情况下(但不是全部),这似乎会导致无限循环.我有一个案例,当我调用Add()其中一个集合时,它会导致框架在两个类中的属性的get方法之间来回循环,有效地占用所有CPU并冻结应用程序.

有没有人经历过这样的事情?我该怎么做才能防止它发生?

PS:我正在使用Rab Hallett的Mocking Framework生成器来生成代码.不知道这是否相关.

更新1:它肯定与模拟框架有关

更新2:它不是一个无限循环,但它访问两个表中的所有元素 - 可能导致n*m访问.我会更多地了解它并回来

Shi*_*iji 0

正如你所说,无限循环仅在某些情况下存在。这可能是数据问题。

例如,如果类 1 X 有 3 个类 2 的 A、B 和 C。如果类 2 A 又具有 X 的类 1,那么就会出现无限循环。

我在使用Automapper时也遇到过这个问题。

要修复它,您可以:

  • 清理数据,以免出现无限循环
  • 添加一个计数器,在 x 次迭代后停止循环