2015-12-02 49 views
0

成員,我有$expand第一個問題:
此工程 - >api/Components('XYZ')/Childs
這不 - >api/Components('XYZ')?$expand=Childs

我已經使用的EntityFramework( 6.1.3)映射數據庫中的視圖(只讀),然後基於EF實體創建OData v3控制器。它適用於大多數表格,但是當實體之間的關係不是基於導航屬性而是LINQ查詢時會出現問題。
下面是代碼示例:

public class ComponentsController : ODataController 
{ 
.... 
    [EnableQuery] 
    public IQueryable<Component> GetChilds([FromODataUri] string key) 
    { 
    var id = db.Components.First(c => c.Id == key).Identity; 
    return db.ChildComponents.Where(cc => cc.Identity == id).Select(cc => cc.Component); 
    } 

什麼我不明白的是爲什麼我不能使用$expand=Childs(...)/Childs正常工作?

EDIT1:

這裏是$元數據 - 導航屬性「用戶」與$作品擴張,但「童車」別:

<EntityType Name="Component"> 
    <Key> 
    <PropertyRef Name="Id"/> 
    </Key> 
    <Property Name="Id" Type="Edm.String" Nullable="false"/> 
    <Property Name="Type" Type="Edm.String"/> 
    <Property Name="Name" Type="Edm.String"/> 
    <Property Name="Identity" Type="Edm.String"/> 
    <NavigationProperty Name="Users" Relationship="HostingDb.Pandora.HostingDb_Pandora_Component_Users_HostingDb_Pandora_ComponentUser_UsersPartner" ToRole="Users" FromRole="UsersPartner"/> 
    <NavigationProperty Name="Childs" Relationship="HostingDb.Pandora.HostingDb_Pandora_Component_Childs_HostingDb_Pandora_Component_ChildsPartner" ToRole="Childs" FromRole="ChildsPartner"/> 
</EntityType> 
<Association Name="HostingDb_Pandora_Component_Users_HostingDb_Pandora_ComponentUser_UsersPartner"> 
    <End Type="HostingDb.Pandora.ComponentUser" Role="Users" Multiplicity="*"/> 
    <End Type="HostingDb.Pandora.Component" Role="UsersPartner" Multiplicity="0..1"/> 
</Association> 
<Association Name="HostingDb_Pandora_Component_Childs_HostingDb_Pandora_Component_ChildsPartner"> 
    <End Type="HostingDb.Pandora.Component" Role="Childs" Multiplicity="*"/> 
    <End Type="HostingDb.Pandora.Component" Role="ChildsPartner" Multiplicity="0..1"/> 
</Association> 
+0

很奇怪$ expand已經被支持。你能否顯示元數據? –

+0

@SamXu我已經添加了元數據 – micmax93

+0

使用mvc api ....你如何使用它,angularjs?即什麼是調用GetChilds ....什麼是js的樣子。 – Seabizkit

回答

0

你不能指望GetChilds(string)被調用的請求

api/Components('XYZ')?$expand=Childs 

否則,真正的方法應該在控制器被調用是Get(string)用於上述請求。另一方面,GetChilds(string)僅用於api/Components('XYZ')/Childs

我寫了一個示例項目來測試。您可以參考here瞭解odata的路由。謝謝。

相關問題