OData Использование FunctionImport в действии POST - PullRequest
0 голосов
/ 16 мая 2019

Попытка понять, возможно ли использовать FunctionImport как часть пути.В приведенном ниже примере не используется FunctionImport, и он работает должным образом:

.../MyEntities('MyEntityKey')/MyChildEntities('MyChildEntityKey')/MyChildAction

Однако, когда я решаю использовать FunctionImport, как показано ниже:

.../GetMyEntity('Param1')/MyEntityKey/MyChildEntities('MyChildEntityKey')/MyChildAction

Я получаю The number of keys specified in the URI does not match number of key properties for the resource 'MyEntity'.

Есть мысли о том, что мне не хватает?Заранее спасибо.

Вот классы, которые я использую;

public class MyServer : IUpdatableContext
{
    public IQueryable<MyEntity> MyEntities
    {
        return GetMyEntities().AsQueryable();
    }

    [WebGet]    
    public IQueryable<MyEntity> GetMyEntity(string param1)
    {
        return GetMyEntities(param1).AsQueryable();
    }
}

[DataServiceKey("MyEntityKey")]
public class MyEntity
{
    public IEnumerable<MyChildEntity> MyChildEntities
    {
        get
        {
            return GetMyChildEntities().AsEnumerable();
        }
    }
}

[DataServiceKey("MyChildEntityKey")]
public class MyChildEntity
{
    [EntityAction("MyChildAction")]
    public Guid MyChildAction()
    {
        return ExecuteMyChildAction();
    }
}

и соответствующий им файл .edmx:

<EntityContainer Name="MyServer" m:IsDefaultEntityContainer="true">
  <EntitySet Name="MyEntities" EntityType="MyEntity" />
  <FunctionImport Name="GetMyEntity" ReturnType="Collection(MyEntity)" EntitySet="MyEntities" m:HttpMethod="GET">
    <Parameter Name="param1" Type="Edm.String" />
  </FunctionImport>
</EntityContainer>

<EntityType Name="MyEntity">
  <Key>
    <PropertyRef Name="MyEntityKey" />
  </Key>
  <Property Name="MyEntityProp" Type="Edm.Int32" />
  <NavigationProperty Name="MyChildEntity" Relationship="MyEntity_MyChildEntities" ToRole="MyChildEntities" FromRole="MyEntity"/>
</EntityType>

<EntityType Name="MyChildEntity">
  <Key>
    <PropertyRef Name="MyChildEntityKey" />
  </Key>
  <Property Name="MyChildEntityProp" Type="Edm.Int32" />
</EntityType>

<EntitySet Name="MyEntities" EntityType="MyEntity" />
<EntitySet Name="MyChildEntities" EntityType="MyChildEntity" />

<Association Name="MyEntity_MyChildEntities">
  <End Type="MyEntity" Role="MyEntity" Multiplicity="1" />
  <End Type="MyChildEntity" Role="MyChildEntities" Multiplicity="*" />
</Association>
...