Implementieren von OData mit WebApi und zugeordneten Modellen

8

Ich versuche OData in WebApi zu implementieren. Ich verwende das Repository-Muster und EF5 (im Backend), das immer noch mit allen Beispielen übereinstimmt, die ich gefunden habe. Hier ist, wo etwas wackelig wird. Ich versuche, die EF-generierten Klassen hinter Modellen zu verstecken, die mit AutoMapper im Controller gemappt werden. Die Beispiele, die ich gesehen habe, scheinen zurückzukehren, was auch immer aus dem Repo kommt.

Ich möchte die OData-Parameter (auf die Ergebnisse, die zugeordnet wurden) nicht im Controller, sondern im Repository anwenden, um den Wert aus der verzögerten Ausführung beizubehalten. Ich kann die ODataCriteria in das Repository übergeben, aber wenn ich versuche, Appy, erhalte ich einen Fehler, weil es scheint, dass die Optionen / Ergebnisse auf die IQueryable & Lt; Modell & gt; von der Präsentationsschicht nicht IQueryable & lt; EF_Class & gt;.

Ich habe gesehen, dass jemand anders in einem anderen Post davon abhing, es war jedoch ein kleiner Teil des Posts und es schien nicht zu helfen.

Hat jemand anderes damit zu tun gehabt? Ich möchte die EF-Klassen wirklich nicht veröffentlichen. Oh, ich benutze zuerst DB.

Vielen Dank im Voraus ...

    
Lenny 16.05.2013, 16:46
quelle

2 Antworten

0

Hier ist ein Code, der Ihre Anforderungen demonstriert.

Um das Ergebnis zu erreichen, müssen Sie sicherstellen, dass die Abfrage ausgeführt wurde (mit ToList() ). Die effizienteste Methode ist das Hinzufügen von Paging (Bonus) und das Zurückgeben eines Objekts PageResult<> .

%Vor%

Hier sind die using-Anweisungen

%Vor%

Testklassen

%Vor%

und einige Daten zum Testen

%Vor%     
qujck 17.05.2013, 10:32
quelle
0

Wenn das von Ihnen zurückgegebene Queryable über einen Mechanismus dbContext.dbSet.Select (x = & gt; neues Modell {Id = x.Id}) anstelle von AutoMapper ausgeführt wird. Dann kann die Anwendung von Bedingungen auf Queryable vom EF LINQ-Provider automatisch übersetzt und ausgewertet werden. Andernfalls müssen Sie einen benutzerdefinierten LINQ-Provider schreiben, der die Ausdrücke davon ändert, dass Ausdrücke, die auf Modelleigenschaften basieren, in Ausdrücke aus EF_Class-Eigenschaften umgewandelt werden.

    
Rich 16.05.2013 22:01
quelle