在尝试序列化 EF STE 对象图时,我回到了我之前写的关于 StackOverflowException的帖子中的“绘图板”......在未能成功调整 IIS7 中的堆栈大小后,如此处所述,我决定去沿着寻找根本原因的道路...
我相信这与 EF 模型的设计方式有关。
简化后,我有一个父实体和一个子实体。Child 实体有两个返回给 Parent 的导航属性,例如 Child.Parent 和 Child.ParentUsed。自然地,父级有两个子级集合。
在仔细查看导致 StackOverflow 异常的数据后,我注意到这个对象图中有几个循环。我无法证明这一点,但我相当肯定循环导致了这个 StackOverflow 异常。
如果我删除数据库中这张表的数据,问题就会消失,但我将无法删除客户机器上的记录。不管设计是否糟糕,我必须以某种方式在 EF 级别解决这个问题。
我有什么选择来重做这个?如果我的 Child 对象没有返回父级的导航属性,而是有两个 int Fks,我想知道是否会有导致序列化阻塞的循环?有没有办法在一个实体上将导航属性更改为 Fks?
谢谢!
更新:
将子项的两个导航属性都移回父项可以解决此问题。我认为这不一定是周期问题,但也许堆栈已经用尽了试图检查引用并确定周期。
我不一定要删除导航属性。它们对客户端很有用。有没有更好的方法来解决这个问题?自定义序列化?