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?
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 –
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
@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. –