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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage