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

时间:2012-02-28 14:01:27

标签: .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;}
}

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

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

PS:我正在使用Rab Hallett's Mocking Framework generator来生成代码。不知道这是否相关。

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

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

1 个答案:

答案 0 :(得分:0)

如你所说,infinate循环仅在某些情况下。这可能是一个数据问题。

例如,如果你认为class1 X有3个class2的A,B和C.如果class2 A又是class1的X,那么你有一个infinate循环。

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

要解决此问题,您可以:

  • 清理数据,以便没有无限循环
  • 添加一个在x次迭代后停止循环的计数器