0

次のコードは、ViewModel クエリをモデルに変換し、返された結果を PageResult として ViewModel に変換します。これはすべて正常に機能しますが、デフォルト クエリの一部として (または querycontext の一部として最新バージョンを使用して) include を使用しようとすると、OData フォーマッタがおかしくなり、子要素が含まれません。実際に子要素が含まれていることをデバッグして確認しました。これは、ODataController から拡張したコントローラーでのみ発生します (基本的に、ApiController から拡張したコントローラーはすべて正常に動作しますが、OData 形式の結果が必要です)。 最新のナイトリー ビルド (Microsoft.Data.OData 5.5.0.0) も試してみましたが、それでもうまくいきません。 どんな助けでも大歓迎です。

public class ProductsController : ODataController
    {
        APPContext context = new APPContext();

        public PageResult<ProductViewModel> Get(ODataQueryOptions QueryOptions)
        {
            EdmModel model = new EdmModel();
            ODataQueryContext queryContext = new ODataQueryContext(model.GetEdmModel(), typeof(Product));
            var mappedQuery = new ODataQueryOptions(queryContext, QueryOptions.Request);
            var results = new List<ProductViewModel>();

            foreach (var result in mappedQuery.ApplyTo(this.context.Serials.Include("Status").Include("Category")))
            {
                AutoMapper.Mapper.CreateMap(result.GetType(), typeof(ProductViewModel));
                results.Add(AutoMapper.Mapper.Map<ProductViewModel>(result));
            }

            PageResult<ProductViewModel> pr = new PageResult<ProductViewModel>(results.AsEnumerable<ProductViewModel>(), mappedQuery.Request.GetNextPageLink(), mappedQuery.Request.GetInlineCount());
            return pr;
        }
    }
4

1 に答える 1

1

OData では、関連エンティティはナビゲーション リンクとして表されます。そのため、顧客フィードがある場合、各顧客に関連する注文は顧客フィードの一部にはなりません。代わりに、ナビゲーション リンクとして表されます。$expandクエリ オプションを使用して、関連するエンティティを展開するように OData サービスに明示的に指示できます。したがって、各顧客の関連する注文を展開する場合は、 url を要求する必要があります~/Customers?$expand=Orders

于 2013-06-19T03:07:02.600 に答える