Почему мой ответ oData не имеет свойств навигации
Если вы посмотрите на следующий пример фида oData, вы 'Посмотрите включенные свойства навигации для 'ребенка элементы, чтобы сказать вам, какой URL следовать:
http://services.odata.org/OData/OData.svc/Suppliers?$format=json
Например, поставщик 0 имеет свойство навигации по продуктам. Это ссылка на список продуктов для этого поставщика.
http://services.odata.org/OData/OData.svc/Suppliers(0)/Products?$format=jsonI»
я пытаюсь сделать то же самое сODataConventionModelBuilder
а такжеEntitySetController
так что когда я прошуoData/Product(0)
это покажет мнефункции' для продукта:
Я создаю свою модель, как это (на основеПример GetImplicitEdmModel)
// odata
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet("Product");
modelBuilder.EntitySet("ProductFeature");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);
Я создаю контроллер для WebAPI:
public class ProductController : EntitySetController
{
RRStoreDBContext _db = new RRStoreDBContext();
[Queryable]
public override IQueryable Get()
{
return _db.Products.AsQueryable();
}
public ICollection 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)
указывая на это.
Что мне нужно сделать, чтобы это появилось.Эта статья говорит этоавтомат, но яя их не вижу
ODataConventionModelBuilder, который обычно рекомендуется для ODataModelBuilder, автоматически выведет иерархии наследования при отсутствии явной конфигурации. Затем, как только будет выведена иерархия, она также выведет свойства и свойства навигации. Это позволяет вам писать меньше кода, ориентируясь на то, где вы отклоняетесь от наших соглашений.