2014-07-03 3 views
9

Ich habe ein ziemlich einfaches Domain-Modell mit Pocos erstellt. Ich habe diese zu einem EF DB-Kontext mit EntityTypeConfiguration<TEnitityType> Klassen zugeordnet. Das alles funktioniert gut.Wie erhalten Sie eine Web-API odatamodelbuilder mit EF fließenden API-Mappings arbeiten

Ich versuche jetzt, einen OData V4 WebAPI-Controller-Endpunkt mit einem ODataConventionModelBuilder zu erstellen, und das ist, wo die Dinge nicht gelöst werden. Alles funktioniert gut, bis es auf eine Assoziation stößt, die nicht auf Konventionen basiert. Aber ich kann keinen Weg finden, um die ODataBuilder die Mappings von meinen EntityTypeConfiguration<TEnitityType> Klassen zu holen.

Dies läßt meine mit 2 ungenießbar Optionen

  • mein schönes, sauberes pocos mit schmutzigen Attributen Verzieren.
  • Re-Karte alle nicht Konvention basiert Zuordnungen manuell die ODataBuilder

Nicht sicher, ob Code unter Verwendung von Proben helfen, aber hier sind sie sowieso, ich habe die Einheiten der Kürze halber vereinfacht.

var builder = new ODataConventionModelBuilder(); 

      builder.EntitySet<Item>("Items"); 
      config.MapODataServiceRoute(
       routeName: "odata", 
       routePrefix: "odata", 
       model: builder.GetEdmModel(), 
       batchHandler: new DefaultODataBatchHandler((GlobalConfiguration.DefaultServer))); 

public class Item 
    { 
     public Int32 Id { get; set; } 

     public Int16 ItemTypeId { get; set; }     

     public virtual ItemType Type { get; set; } 
     public virtual ICollection<ItemVersion> Versions { get; set; } 
     public virtual ICollection<ItemTag> Tags { get; set; }  
    } 

Das Problem kommt, wenn es die ItemTags Sammlung begegnet, hier ist ein ItemTag:

public class ItemTag 
    { 
     public Int32 ItemId { get; set; } 

     public string Tag { get; set; } 

     public Item Item { get; set; } 
    } 

, die Sie nicht Konvention sehen basiert ist und ich habe eine Konfigurationsklasse für sich wie folgt:

Kennt jemand eine Möglichkeit, dass ich diese EntityTypeConfiguration Dateien mit einem ODataBuilder oder Web-API verwenden kann?

EDIT

Wenn this page gefunden, die es scheint darauf hinzudeuten könnte möglich sein, mit EF 6, die ich verwende. Was ich tun möchte, ist dies

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); 
modelBuilder.EntitySet<Dbf>("Dbfs"); 
//   modelBuilder.Configurations.Add(new DbfMap()); <---- NO GOOD - Needs Class from DBContext we only have a model builder :(
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel(); 
config.Routes.MapODataRoute("ODataRoute", "odata", model); 

, aber der Builder hat keine Konfigurationen Eigenschaft.

+2

fanstatic hilft !, tat ein bisschen mehr googeln und das Top-Ranking Suchergebnis für „OData web api fließend Datenzuordnung“ ist nun diese Frage SO. –

+1

Haben Sie das jemals herausgefunden? Ich weine meine Augen über genau dasselbe. –

Antwort

0

Zwei Dinge:

  1. ich jetzt mehr Quellen gelesen habe, dass die Station gegen verzögertes Laden und Serialisierung verwenden; Das ist im Grunde was OData ist; (Es verwendet sogar die Attribute system.runtime.serialization.datacontact und datamember)

  2. Ich hatte mehr Erfolg beim expliziten Laden von Kontext und Definieren von Navigationseigenschaften im modelbuilder für dbContext. Ich verstehe, dass Sie angepasste nav-Eigenschaften betrachten, aber ich bin ziemlich sicher, dass diese Methoden für die ODataModelBuilder-Klasse überschrieben sind (die nicht viel annehmen und weniger Entity Framework benötigen). Wo Sie schon erwähnt haben, EF zu verwenden, stelle ich mir vor, dass dies die Richtung ist, in der Sie arbeiten werden. Wenn Sie Ihre Modellnamen nicht aliasieren müssen, fügen Sie einen Eintrag für jedes Set hinzu, indem Sie die Konvention verwenden.

    EntitySet ("routePrefixName")

in den EdmModel Aufbau, und es Drähte auf die Beziehungen, die Sie zuvor mit Fluent gemacht. Wenn Sie dem zugrunde liegenden Modell überflüssige Elemente hinzufügen müssen, sollten Sie jede Klasse als EntityType <>() definieren und nur den Schlüssel festlegen. EdmBuilder kann milde Eigenschaften und Schlüsselzuordnungen zum Anhängen an das EF-Modell im ODataConventionModelBuilder verwenden.

Ich habe gerungen und seit einiger Zeit gesucht, und es scheint nicht zu sein eine Fülle von Informationen über .Net OData v4 herumschweben, wahrscheinlich aufgrund der ganzen Kraft datetimeoffset Problem.

Hoffnung, die etwas

Verwandte Themen