Wie erhalten Sie einen Web-API-odatamodelbuilder, um mit EF-fähigen API-Mappings zu arbeiten?

9

Ich habe ein ziemlich einfaches Domain-Modell mit Pocos erstellt. Ich habe diese mit EntityTypeConfiguration<TEnitityType> -Klassen einem EF DB-Kontext zugeordnet. Das alles funktioniert gut.

Ich versuche jetzt, einen OData V4 WebAPI-Controllerendpunkt mit ODataConventionModelBuilder zu erstellen, und hier werden die Dinge gelöst. Alles funktioniert gut, bis es auf eine Assoziation stößt, die nicht auf Konventionen basiert. Aber ich finde keine Möglichkeit, die ODataBuilder dazu zu bringen, die Zuordnungen von meinen EntityTypeConfiguration<TEnitityType> -Klassen aufzunehmen.

Dies hinterlässt meine 2 ungenießbaren Optionen

  • Dekoriere meine schönen, sauberen Pocos mit schmutzigen Attributen.
  • Ordnen Sie alle nicht-konventionenbasierten Zuordnungen manuell mithilfe von ODataBuilder neu zu.

Nicht sicher, ob Codebeispiele helfen, aber hier sind sie sowieso, ich habe die Entitäten der Kürze wegen vereinfacht.

%Vor%

Das Problem kommt, wenn es auf die ItemTags-Sammlung stößt, hier ist ein ItemTag:

%Vor%

Was Sie sehen können, ist nicht konventionsbasiert und ich habe eine Konfigurationsklasse wie folgt:

%Vor%

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

BEARBEITEN

Wenn diese Seite gefunden wird, scheint dies darauf hinzuweisen, dass es mit EF 6 möglich ist, das ich verwende. Was ich tun möchte, ist dies

%Vor%

, aber der Builder hat keine Configuration-Eigenschaft.

    
Ben Robinson 03.07.2014, 15:15
quelle

1 Antwort

0

Zwei Dinge:

  1. Ich habe jetzt mehrere Quellen gelesen, die sich gegen die Verwendung von Lazy Loading und Serialisierung richten; 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 beim Definieren von Navigationseigenschaften im modelbuilder für dbContext. Ich verstehe, dass Sie sich angepasste Nav-Eigenschaften ansehen, 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 EF bereits erwähnt haben, 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")

beim Erstellen des EdmModel, und es verbindet die Beziehungen, die Sie zuvor mit Fluent gemacht haben. Wenn Sie dem zugrunde liegenden Modell überflüssige Elemente hinzufügen müssen, sollten Sie jede Klasse als EntityType & lt; & gt; () definieren und nur den Schlüssel festlegen. EdmBuilder kann milde Eigenschaften und Schlüsselzuordnungen verwenden, um das EF-Modell im ODataConventionModelBuilder anzuhängen.

Ich habe seit einiger Zeit gewrestlet und gesucht, und es scheint keine Fülle von Informationen über .Net OData v4 zu geben, wahrscheinlich aufgrund des gesamten force datetimeoffset Problems.

Hoffe das hilft etwas

    
Nathan Teague 04.12.2014 15:50
quelle