3

基になるデータが Entity Framework から来ていない場合、OData を Asp.Net Web Api で動作させるのに問題があります。

最新の OData Nuget パッケージ ( Microsoft ASP.NET Web API OData 0.2.0-alpha release) を使用していますが、OData クエリを渡そうとすると (たとえば$top=10)、次のエラーが表示されます。

指定されたキーは辞書にありませんでした

OData クエリを送信しなければ、メソッドを問題なく呼び出すことができます。Entity Framework を使用する同じ Web Api プロジェクト内の他のメソッドは、OData クエリで正常に機能します。機能しないのは、Subsonic ORM を使用して、基礎となる AS400 データ ソースをクエリすることです。IQueryable を返します。これは、VS 2012 および .NET 4.5 RTM がリリースされ、OData が別のパッケージに移動される前に問題なく機能していました。(つまり、VS2012 および .NET 4.5 のベータ版および RC バージョンで動作)

どんなアイデアでも大歓迎です。

4

1 に答える 1

1

この問題は、基になるクエリ プロバイダーではうまく機能しない安定した順序付けが原因であると思われます。確認のため、エラーのコールスタックを載せていただけますか?

このリリースでの OData クエリ構成の大きな変更点の 1 つは、上位項目を取得する前に安定した順序が保証されることです。これを行う理由は、ユーザーがランダムなデータ ソースを持っている可能性があり、返されるデータが変化し続ける可能性があるためです。

web api odata パッケージが行う方法は、OrderyBy [Keys]top を実行する前にクエリを追加することです。または、モデルにキーが定義されていない場合 (キーは ID、EntityID、または [Key] 属性付きプロパティです)、モデル内のすべてのプリミティブ プロパティを使用して順序付けを行います。

データ ソースが常に安定した順序でデータを返すことを確認できる場合は、コードでこの機能をオフにすることができます。

[Queryable(EnsureStableOrdering = false)]
于 2012-11-19T20:07:22.767 に答える