不能在服务运营结果上调用$ expand

时间:2011-12-07 20:57:11

标签: wcf odata

我有Odata服务,公开“StartAction”服务操作。此操作返回ActionResponse实体

  <EntityType Name="ActionResponse">
    <Key>
      <PropertyRef Name="FolderId" />
    </Key>
    <Property Name="FolderId" Type="Edm.String" Nullable="false" />
    <Property Name="ClientData" Type="Edm.String" Nullable="true" />
    <Property Name="ProcessCaption" Type="Edm.String" Nullable="true" />
    <Property Name="ProcessName" Type="Edm.String" Nullable="true" />
    <Property Name="ProjectName" Type="Edm.String" Nullable="true" />
    <Property Name="ProjectVersion" Type="Edm.Int32" Nullable="false" />
    <Property Name="ServerData" Type="Edm.String" Nullable="true" />
    <Property Name="StageName" Type="Edm.String" Nullable="true" />
    <Property Name="UserName" Type="Edm.String" Nullable="true" />
    <NavigationProperty Name="Action" Relationship="Metastorm.EngineData.ActionResponse_Action_Action_ActionResponse" FromRole="ActionResponse_Action" ToRole="Action_ActionResponse" />
  </EntityType>
 <Association Name="ActionResponse_Action_Action_ActionResponse">
    <End Role="ActionResponse_Action" Type="Metastorm.EngineData.ActionResponse" Multiplicity="0..1" />
    <End Role="Action_ActionResponse" Type="Metastorm.EngineData.Action" Multiplicity="0..1" />
  </Association>

当我尝试$扩展Action导航属性时,我收到以下错误:

    Query options $expand, $filter, $orderby, $inlinecount, $skip and $top cannot be applied to the requested resource

如果我只用一个项目返回IQueryable,我可以解决它,但看起来很难看。有没有人知道如何让$ expand扩展为返回单个实体的Service Operations工作?

提前致谢

P.S。该服务具有自定义实现

1 个答案:

答案 0 :(得分:2)

服务操作必须返回IQueryable才能使任何其他查询选项起作用(这是必要的,因为WCF DS需要IQueryable来构造其他查询选项的表达式)。 返回一个带有单个结果的IQueryable是完全没问题的。在服务操作方法上添加[SingleResult]属性,让WCF DS知道IQueryable只返回一个值(以便查询选项的行为相应)。