2016-12-01 4 views
0

整数キーを使用しているときにASP.NETでOData V4サービスを使用している問題があります。私は、SOAPサービスからデータを取得するため、Entity Frameworkを使用していません。OData V4識別子がASP.NETデータサービスで機能しないのはなぜですか?

public class RecipeDto 
{ 
    public RecipeDto(); 
    public RecipeDto(string name); 
    public RecipeDto(int ident); 

    public string Description { get; set; } 
    public int Ident { get; set; } 
    public string Name { get; set; } 
    public List<RecipeVersionDto> Versions { get; set; } 
} 

そして、私は流暢なAPIを使用して、私のキーを設定します:ここで

は私のデータクラスがある。ここ

var rtdto = builder.EntitySet<RecipeTemplateDto>("AgentConfigTemplates").EntityType 
       .HasKey(r => r.Ident) 
       .HasMany(r => r.Versions); 

は私のサービス上で私のメタデータである:

<EntityType Name="RecipeTemplateDto"> 
<Key> 
<PropertyRef Name="Ident"/> 
</Key> 
<Property Name="Ident" Type="Edm.Int32" Nullable="false"/> 
<Property Name="Description" Type="Edm.String"/> 
<Property Name="Name" Type="Edm.String"/> 
<NavigationProperty Name="Versions" Type="Collection(Ifmdatalink.Linerecorder.Backend.PlugIn.dto.RecipeTemplateVersionDto)"/> 
</EntityType> 

今私は、次のクエリを使用してエンティティセットの最初のエントリを取得することを期待します。

GET http://localhost:13917/my.svc/AgentConfigTemplates(1) 

しかし、私は常に完全なリストを取得します。

なぜこのようなことが起こりますか、どのように最初のエントリを取得できますか?

どうやってオデットコントローラーを拡張する必要がありますか?

私は引用符で私のキーを入れたら、私は悪い要求応答を取得します。

答えて

0

答えはモデルでも流暢なAPI定義でもありません。これはコントローラの問題です。 ODataコントローラは、2つのgetメソッドを実装する必要があります。

public async Task<IQueryable<AgentVersionDto>> Get() 

public SingleResult<AgentDto> Get([FromODataUri] int key) 

これは、エンティティセット全体と1つのエントリの取得をカバーします。後者が実装されていない場合、webapi 2のodataサービスは常にリスト全体を返します。

関連する問題