2013-08-29 20 views
7

Rozważmy następujący sposób w kontrolerze Web API:WebAPI OData bez 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>(); 
    } 

Oto lista zbudowana jest ręcznie, a jeśli mogę przeglądać na następujący adres URL:

http://localhost:52446/odata/Mandates?$filter=Id eq 1 zwraca prawidłową pozycję z listy.

Teraz oczywiście lista jest bardziej prawdopodobna jako struktura bazy danych. Dane zostaną pobrane za pomocą niektórych ORM i zwrócone do usługi Web API.

Nie używam Entity Framework (i nie mogę z powodu starszych systemów).

Jak korzystać z Web API w tym przypadku? Jak przetłumaczyć parametry adresu URL, aby filtry były stosowane przez warstwę odpowiedzialną za dostęp do danych?

+3

Jeśli nie ma dostawcy LINQ dla bazy danych, należy przetłumaczyć ODataQueryOptions. Zacznij od tego wpisu na blogu: http://blogs.msdn.com/b/webdev/archive/2013/02/25/translating-odata-queries-to-hql.aspx –

+0

Got to. Wskazałeś mi właściwą drogę ze swoim dostawcą LINQ. Dowiedziałem się, że mogę to zrobić z łatwością za pomocą ORM, którego używamy (OpenAccess). Więcej informacji tutaj: http://documentation.telerik.com/openaccess-orm/developers-guide/using-web-services/asp.net-web-api/developer-guide-wcfservices-web-api-exext-oacontext – Sam

+0

@Sam mógłbyś zamieścić swój komentarz jako odpowiedź? W przeciwnym razie pytania wydają się być aktywne, nawet jeśli zostaną rozwiązane. –

Odpowiedz