oData を使用して WCF データ サービスをクエリしようとしています。すべて正常に動作しますが、多対多の関係では展開関数が機能しません。関係は次のとおりです。Product 1-* ProductOrder *-1 Order
サービスを照会するコードは次のとおりです。
var queryProductOrder = (DataServiceQuery<ProductOrder>)SessionHelper.context.ProductOrder.Expand(x=>x.Product);
var allProductOrders = await queryProductOrder.ExecuteAsync();
これをデバッグ モードで実行し、allProductOrder オブジェクトを確認すると、製品がありません。興味深いことに、生成された OData クエリを確認してブラウザーで実行すると、製品が展開されます。
クエリは次のようになります。
http://localhost:10000/ProductOrder()?$expand=Product
JSON-Result が展開されます。
{"odata.metadata":"http://localhost:10000/$metadata#ProductOrder","value":[{"Product":{"id":1,"Name":"Die Sims","Tax_fk":1,"Price":"44.99","Description":"Lebenssimulation","Stock":"99.00","TotalOrder":"0.00","ProductUnit_fk":1,"Barcode":"121212121","MainImage_fk":null,"Tenant_fk":1,"PurchasePrice":null},"id":1,"Product_fk":1,"Order_fk":1,"Tenant_fk":1,"Amount":"10"}]}
また、混乱を招くのは、他の多対多の関係では、expand メソッドが本来のように機能するという事実です。
allProductOrders
オブジェクトを展開しないのはなぜですか? allProductOrders.First().Product
オブジェクトnull
であるのに、生成された OData クエリが Expanded データを返すのはなぜですか?