2016-05-04 13 views
0

Ich habe einen ODATA-Aufruf, der beim ersten Mal richtig funktioniert, aber bei jedem weiteren Aufruf fehlschlägt, weil die Eigenschaften nicht übereinstimmen. Mein Controller hat sehr wenig Logik, da er nur dafür verantwortlich ist, dass mein Domain-Service eine Entity Framework-Datenbank abfragt und die Ergebnisse als Ansichtsmodelle zurückgibt. Wenn ich versuche zu sortieren, erhalte ich einen Fehler, weil die Hierarchie meines Ansichtsmodells nicht mit meinem Domänenmodell übereinstimmt.Odata: Mapping Modell zu Domänenmodell anzeigen

Domain Model:

public class Parent 
{ 
    public object Child 
    { 
    public string Name 
    } 
} 

Ansicht Modell:

public class Parent 
{ 
    public string ChildName 
} 

den obigen Beispielen die EF-Abfrage wäre eine Liste der Eltern zurückkehren, die ich umwandeln würde Modelle sehen, um die loszuschicken Klient. Wenn eine Sortieranforderung für ChildName gestellt wird, schlägt odata fehl, da Parent kein Konzept für ChildName hat. Ich muss ChildName Child.Name zuordnen. Ich habe Beispiele von Leuten gesehen, die EntitySets verwenden, um den Namen zu ändern, aber keine, die das Modell in meinem Fall abbilden.

Antwort

0

Ich endete mit EF, um mein Domänenmodell zu einem Ansichtsmodell mit einem LINQ-Ausdruck während der Abfrage zu konvertieren. Beispiel änderte aber die Ansicht Modell ParentView und hinzugefügt Konstruktor:

var query = from p in context.Parent select new ParentView(p.Child.Name) 

Die positive daran ist, dass es alle laufen auf der Datenbank ist so bin ich nicht unnötige Daten zu transportieren. Außerdem kann ich weiterhin die Odata-Optionen in der Abfrage verwenden, da Odata der Abfrage hinzugefügt werden. Ich kann jedoch nicht anders, als zu fühlen, dass dies nicht der beste Weg ist.