WebApi で odata を使用することを検討しています。これまでのところ非常に優れており、wcf データ サービスよりも柔軟な点が気に入っています。
ただし、モデルで仮想 IQueryable プロパティを使用しようとすると、問題が発生します。
たとえば、次のモデル クラスがあります。
public class MainItem
{
public int Id { get; set;}
public virtual IEnumerable<SubItem> SubItems { get; set;}
}
そして、私の MainItemsController は次のようになります
public class MainItemsController : EntitySetController<MainItem, int>
{
[Queryable]
public override IQueryable<MainItem> Get()
{
return SomeMainItemIQueryable();
}
public override GetEntityByKey(int key)
{
return SingleMainItem(key);
}
[Queryable]
public IQueryable GetSubItems(int key)
{
return SomeSubItemIQueryable(SingleMainItem(key));
}
}
次の URL で正しい結果が得られます: /odata/MainItems /odata/MainItems(1) /odata/MainItems(1)/SubItems
しかし、/odata/MainItems(1)/SubItems(1) を実行しようとすると
このエラーが表示されます このサービスは、フォーム '~/entityset/key/navigation/key' の OData 要求をサポートしていません
この呼び出しと /odata/MainItems(1)/SubItems を SubItemsController にリダイレクトしたいと思います。
カスタム ODataPathHandler を作成することでおそらくこれを行うことができますが、それはこれを行う正しい方法とは思えません。