我正在使用实体框架处理mvc 2.0应用程序。使用entityframework,我使用带有poco对象的存储库模式。要从问题开始,当我将实体对象转换为json时,我得到一个循环引用错误。
经过一些搜索,我发现生成了代理以支持延迟加载。如果两个类(A和B)之间存在导航属性,则会导致循环引用错误。很容易理解。所以我试着解决它。
我禁用了代理和延迟加载。如果我只想加载A类,这是有效的。而不是代理现在有空值,所以可以解析它们。
但现在我想加载一个类,例如Orders,我想看看客户下了什么订单:
假设我的类Customer具有Order(1到更多)的导航属性,而Order具有Customer的反向导航属性。当我关闭代理时,我得到一个很好的json返回所有订单,但不是与客户。当我打开代理时,我得到一个循环错误。
但我怎么能收到订单,而购买它们的客户。是否有可能创建一个可以检索订单并加载客户的linq(我有一个客户和订单的存储库)?或者有没有办法剥离代理对象?
我希望我的帖子很清楚,有人可以帮助我。
答案 0 :(得分:0)
<强>问题:强>
对。所以你有A - &gt;的关系B与B是多方。
在EF模型中,A获取导航属性B,B获取导航属性A.
循环参考......很棒......
<强>解决方案:强>
在您的模型中,右键单击B的导航属性A并选择属性。
Getter和setter应该最初都是公开的。将getter设置为Private。
现在这样的事情应该有效。
var results = from a in ctx.A.Include("B")
select a;
var list = results.ToList(); //This is important otherwise youll get a error that the context has been disposed on the next line.
return Json(list, JsonRequestBehavior.AllowGet);
希望这有帮助。
PS: 在发布之后阅读我的答案后,我不再确定我真的回答了你的问题,对不起。不过,我会把它留下来。