实体框架相关实体实例化彼此并陷入无限循环

时间:2018-01-05 10:20:47

标签: c# asp.net entity-framework

我的上下文中有两个类,它们如下;

    public class Supplier
    {
        public int ID { get; set; }
        public virtual ICollection<SupplierOffice> SupplierOffices { get; set; }
    }

    public class SupplierOffice
    {
        public int ID { get; set; }
        public int SupplierID { get; set; }
        public virtual Supplier Supplier { get; set; }

    }       

关系是,供应商拥有零个或多个供应商办事处

这个背景大部分都是预期的;当我想通过ID获得供应商时,它会返回填充了所有办公室的供应商

但是,当我在调试器中检查此代码时,可能存在的问题是什么;

  • 我在供应商中的供应商办公室领域倒塌,它显示了许多办事处
  • 我坍塌其中一个办公室来检查它的属性,我看到它的供应商
  • 此供应商随后包含办事处,办事处有供应商......等等

所以我可以告诉系统,供应商和供应商办公室在循环中无休止地加载。 我不认为这会导致任何性能问题,所以我想知道这是否只是调试器的一个怪癖,实际的系统不会这样做。如果这是无休止地循环,我该如何纠正这个?

非常感谢

1 个答案:

答案 0 :(得分:1)

当您在调试器中导航时,在您编码时使用导​​航属性就没有别的了:

curSupplier.SupplierOffices 

然后,例如

curSupplier.SupplierOffices[0].Supplier 

然后

curSupplier.SupplierOffices[0].Supplier.SupplierOffices

然后

curSupplier.SupplierOffices[0].Supplier.SupplierOffices[1].Supplier

这里没有递归,也没有无限循环。您只是使用导航属性,是的,您可以使用它们无穷无尽... 由于导航属性在两个方向上,您可以这样做,并且没有问题。

正如Adriano Repetti在评论中所写,您始终在检查/访问同一个供应商实例。