如果你看一下下面的示例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