Если посмотреть на следующее OData образцов корма вы увидите включены свойства навигации для элементов «ребенок», чтобы сказать вам, какие URL следовать:Почему мой ответ 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 –
Я думаю, что я официально отказываюсь от этого уже. oДата слишком сложна! –
Привет @Simon_Weaver, я сделал то же самое, что и вы, но ошибка, которую я получаю: «Не реализована, эта служба не поддерживает запросы OData в форме« ~/entityset/key/unresolved ».« Вы могли бы решить проблему? – ridermansb