Warum hat meine oData-Antwort keine Navigationseigenschaften?
Wenn Sie sich das folgende Beispiel für einen oData-Feed ansehen, werden die Navigationseigenschaften für untergeordnete Elemente angezeigt, um anzugeben, welcher URL zu folgen ist:
http://services.odata.org/OData/OData.svc/Suppliers?$format=json
Zum Beispiel hat Lieferant 0 eine Navigationseigenschaft für Produkte. Hier finden Sie eine Liste der Produkte für diesen Lieferanten.
http://services.odata.org/OData/OData.svc/Suppliers(0)/Products?$format=json
Ich versuche dasselbe mitODataConventionModelBuilder
undEntitySetController<Product>
so dass, wenn ich verlangeoData/Product(0)
es zeigt mir die "Eigenschaften" für das Produkt:
Ich erstelle mein Modell so (basierend aufGetImplicitEdmModel-Beispiel)
// 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);
Ich erstelle einen Controller für 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;
}
}
Wenn ich die URL für meine untergeordnete Eigenschaft aufrufe, funktioniert sie und gibt mir die richtige Liste der Funktionen:
/oData/Products(18)/ProductFeatures
Allerdings hätte ich eine Navigationseigenschaft erwartet/oData/Products(18)
darauf hinweisen.
Was muss ich tun, damit dies angezeigt wird?Dieser Beitrag sagt, es ist automatisch, aber ich sehe sie nicht:
Der ODataConventionModelBuilder, der im Allgemeinen gegenüber dem ODataModelBuilder empfohlen wird, leitet Vererbungshierarchien automatisch ab, wenn keine explizite Konfiguration vorliegt. Sobald die Hierarchie abgeleitet ist, werden auch Eigenschaften und Navigationseigenschaften abgeleitet. Auf diese Weise können Sie weniger Code schreiben und sich darauf konzentrieren, wo Sie von unseren Konventionen abweichen.