如果你看一下下面的示例OData源,你會看到一個「孩子」項目包括導航屬性來告訴你要跟蹤的網址:爲什麼沒有我的OData響應具有導航性能
http://services.odata.org/OData/OData.svc/Suppliers?$format=json
例如,供應商0對產品具有導航屬性。 這個鏈接到供應商的產品列表。
http://services.odata.org/OData/OData.svc/Suppliers(0)/Products?$format=json
我試圖做同樣的ODataConventionModelBuilder
和EntitySetController<Product>
這樣,當我要求oData/Product(0)
它會告訴我的 '功能' 的產品:
我這樣創建我的模型(基於GetImplicitEdmModel sample)
// odata
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<RRStoreDB.Models.Product>("Product");
modelBuilder.EntitySet<RRStoreDB.Models.ProductFeature>("ProductFeature");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);
我創建的WebAPI控制器:
public class ProductController : EntitySetController<Product, int>
{
RRStoreDBContext _db = new RRStoreDBContext();
[Queryable]
public override IQueryable<DProduct> Get()
{
return _db.Products.AsQueryable();
}
public ICollection<ProductFeature> GetProductFeatures(int key)
{
Product product = _db.Products.FirstOrDefault(p => p.ProductId == key);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product.ProductFeatures;
}
}
當我居然要求我的孩子財產的URL它的工作原理,並給我的功能正確的列表:
/oData/Products(18)/ProductFeatures
不過,我本來期望在/oData/Products(18)
指向這個導航屬性。
我需要怎麼做才能讓它出現。 This article說,這是自動的,但我沒有看到他們:
的ODataConventionModelBuilder,通常建議在 的ODataModelBuilder,會自動推斷繼承 層次在沒有明確的配置。然後一旦推斷出層次結構,它也將推斷屬性並導航 屬性。這使您可以編寫更少的代碼,重點關注您偏離我們的約定的地方。
我發現了一個樣本,基本上做了我正在做的事 - 它也沒有導航屬性 - 我如何啓用它們 - 或者不支持? http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ODataServiceSample/ODataService/Controllers/ProductsController.cs – 2013-05-09 06:24:27
我想我已經正式放棄了。 oData太複雜了! – 2013-05-09 08:29:22
嗨@Simon_Weaver,我做的和你一樣,但是我得到的錯誤是:'沒有實現,這個服務不支持'〜/ entityset/key/unresolved'形式的OData請求。「你可以解決這個問題嗎? – ridermansb 2013-07-06 22:00:30