2010-08-20 82 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: 在發佈之後閱讀我的答案後,我不再確定我真的在回答你的問題,對不起。儘管如此,我仍然留下它。