假設我們有兩個實體Parent
和Child
,Child
是Parent
(爲了本示例而爲1:1)的導航屬性。可以使用此請求獲取特定父母的孩子:http://example.com/Parent(1)/Child
。爲了完成這項工作,必須在ParentController
中提供GetChild()
方法來提取正確的Child
實體。使用OData和實體框架,我可以加載導航屬性而無需爲每個關係編寫getter方法?
Microsoft.OData.Client
有LoadProperty
方法,可以讓你在這樣的需求獲取導航屬性:
var parent = container.Parents.ByKey(1).GetValue();
container.LoadProperty(parent, "Child");
但由於LoadProperty
內部創建一個http://example.com/Parent(1)/Child
請求,調用失敗,如果我不寫了GetChild()
方法:
未找到路由約定來爲模板「〜/ entityset/key/navigation」選擇OData路徑的操作。
在具有許多導航屬性的項目中,編寫所有getter方法可能需要很多工作。有沒有一種方法來加載導航屬性,而不必爲每一個關係寫getters?
編輯:我應該清楚,我所知道的$expand
- 但有時它需要的初始請求後長時間來獲取相關的實體(這是LoadProperty()做的,什麼需要爲每一個getter單一關係)。
你看過$ expand? http://example.com/Parent?$expand=Child http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/using-select-expand-and-值 –