2013-08-29 11 views
7

Betrachten Sie die folgende Methode in einem Web-Api-Controller:WebAPI ODATA ohne Entity Framework

[Queryable(AllowedQueryOptions= AllowedQueryOptions.All)] 
public override IQueryable<Mandate> Get() 
{ 
     return new List<Mandate>() { new Mandate() { 
      Id = 1, 
      PolicyNumber = "350000000", 
      OpenPositions = new List<OpenPosition>(){ 
       new OpenPosition(){ Id = 1, Amount =2300 }, 
       new OpenPosition(){ Id = 2, Amount =2100 } 
      }}, 
      new Mandate() { 
       Id = 2, 
       PolicyNumber = "240000000" , 
       OpenPositions = new List<OpenPosition>(){ 
       new OpenPosition(){ Id = 3, Amount =2500 }, 
       new OpenPosition(){ Id = 2, Amount =2100 } 
      } 

      } }.AsQueryable<Mandate>(); 
    } 

Hier wird die Liste manuell gebaut und wenn ich auf die folgende URL: die

http://localhost:52446/odata/Mandates?$filter=Id eq 1 gibt es das richtige Element von der Liste.

Jetzt ist offensichtlich die Liste eher eine Datenbankstruktur. Daten würden mithilfe von ORM abgerufen und an den Web-API-Dienst zurückgegeben.

Ich benutze nicht Entity Framework (und ich kann nicht wegen der Legacy-Systeme).

Wie würde ich Web-API in diesem Fall verwenden? Wie würde ich die URL-Parameter so übersetzen, dass die Filter von der für den Datenzugriff zuständigen Schicht angewendet werden?

+3

Wenn für Ihre Datenbank kein LINQ-Provider vorhanden ist, müssen Sie die ODataQueryOptions-Datei übersetzen. Beginnen Sie mit diesem Blogpost: http://blogs.msdn.com/b/webdev/archive/2013/02/25/translating-odata-queries-to-hql.aspx –

+0

Verstanden. Sie haben mich mit Ihrem LINQ-Anbieter in die richtige Richtung gelenkt. Ich habe herausgefunden, dass ich es mit dem ORM, das wir benutzen, leicht machen kann (OpenAccess). Weitere Informationen finden Sie hier: http://documentation.telerik.com/openaccess-orm/developers-guide/using-web-services/asp.net-web-api/developer-guide-wcfservices-web-api-expose-oacontext – Sam

+0

@Sam könntest du deinen Kommentar als Antwort posten? Ansonsten scheint die Frage aktiv zu sein, obwohl sie gelöst ist. –

Antwort

Verwandte Themen