【发布时间】:2012-02-28 14:01:26
【问题描述】:
我在 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:肯定和 mocking 框架有关
更新 2:这不是一个无限循环,但它会访问两个表中的所有元素 - 可能会导致 n*m 访问。我会更深入地研究它并回来
【问题讨论】:
-
肯定和 Hallet 的 Mocking Framework 有关。该行为无法通过标准 .NET Entity Framework 代码生成重现
-
Nilzor,你能确认一下吗?是否可以在没有模拟框架的情况下在上下文中运行相同的案例?
-
以上评论为确认。我确实在没有模拟框架的情况下运行了相同的案例。编辑:所以为了解决我的问题,我必须 a) 修复或解决这个错误,或者 b) 为 EF 找到一个不同的可模拟对象生成器
-
当然! (脸红)完全忽略了名字......我在框架的博客上发表了评论。
标签: .net linq entity-framework