2010-08-20 45 views
0

我正在使用实体框架在mvc 2.0应用程序上工作。通过实体框架,我使用poco对象的存储库模式。从这个问题开始,当我将一个实体对象转换为json时,我得到一个循环引用错误。无法将poco对象从EF 4转换为JSON

经过一番搜索,我发现有代理的生成来支持延迟加载。如果两个类(A和B)之间存在导航属性,则会导致circrar引用错误。相当可以理解。所以我尝试解决它。

我禁用了代理和延迟加载。这工作,如果我只想加载类A.而不是代理的现在有空值,所以他们可以被解析。

但现在我想加载类,例如订单,我想看看有什么客户下订单:

假设我有一个具有导航属性订购(1至更多),Order类客户对客户具有逆向导航属性。当我关闭代理服务器时,我会收到所有订单的好消息,但不会与客户订阅。当我打开代理服务器时,出现一个循环错误。

但是,我怎样才能找回订单,与购买他们的客户。是否有可能创建一个linq来获取订单并加载客户(我有一个客户和订单的存储库)?或者有没有办法剥离代理对象?

我希望我的帖子很清晰,有人可以帮助我。

+0

我很接近这个解决方案。有同样的困境。 – n4rzul 2010-10-21 14:01:13

回答

0

问题:
没错。所以你有关系A - > B,B是多方。 在EF模型中的得到了导航属性B和B获得一个导航属性A. 循环引用...伟大......

解决方案:
在模型中,右击对B的导航属性的并选择属性。 这里的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: 在发布之后阅读我的答案后,我不再确定我真的在回答你的问题,对不起。尽管如此,我仍然留下它。