2010-09-08 53 views
3

當我在瀏覽器中使用URL獲取數據時,我能夠看到相關數據,例如:OData WCF數據服務 - 調用服務時不顯示相關數據(按外鍵)

http://localhost/services.svc/Dinners(1)/RSVPs

,列出5個回函爲DinnerId = 1在我的情況,但是當我從一個不同的項目消耗的OData,我只能檢索晚餐,調試應用表明,回函= 0,而它應該是5.

我正在使用服務,將服務引用添加到我的項目中,並通過一個非常簡單的LINQ查詢返回數據:

public ActionResult Index() 
     { 
      var result = (from d in db.Dinners 
          select d); 

      return View(result); 
     } 

任何想法爲什麼d.RSVPs = 0時,它應該填充?我使用的是EF(代碼優先 - 緊接着ScottGu的一篇文章,有2個非常簡單的POCO課程用於Dinner和RSVP。晚餐類包含RSVPs的集合:public ICollection<RSVP> RSVPs { get; set; },RSVP類指向Dinner,外鍵爲public int DinnerId { get; set; }還有晚宴類:。public Dinner Dinner { get; set; }

感謝

回答

1

顯然,問題出在關鍵字virtual當我創建與相關表的POCO類。如果在我的RSVP類中引用ICollection<RSVP>裏面的Dinner類或Dinner裏面的關鍵字virtual,啓用延遲加載,但WCF數據服務停止工作!取出virtual關鍵字並且WCF數據服務開始再次運行,但是我沒有啓用延遲/延遲加載!我不確定這是功能還是錯誤?現在,我想我將等待下一個版本真正開始使用EF POCO和WCF數據服務。

非常感謝您的關注。

3

您需要使用擴展()來訪問返回的對象圖的多個級別

Loading Deferred Content (WCF Data Services)

喜歡的東西:

var result = (from d in db.Dinners.Expand("RSVPs") 
         select d); 
+0

我在發佈我的問題(懶惰加載?)後想到類似的東西,但無法弄清楚方式。使用'Expand(「RSVPs」)'會導致不同的錯誤:'處理響應流時出錯。服務器失敗,出現以下消息:處理此請求時發生錯誤。「任何想法爲什麼?非常感謝你。 – Saxman 2010-09-09 00:24:48

+0

@Saxman,該字符串需要是屬性名稱。請閱讀文檔,然後嘗試「RSVPs」 – jfar 2010-09-09 00:45:02

+0

嗨jfar,這就是我所做的,我用''RSVPs「',而不是''RSVPS」',也嘗試了幾種不同的組合,但沒有成功。 :(謝謝。 – Saxman 2010-09-09 01:07:21