2013-08-29 99 views
7

考慮在網絡API控制器下面的方法:的WebAPI ODATA沒有實體框架

[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>(); 
    } 

下面列表中手動建立,如果我瀏覽到以下網址:

http://localhost:52446/odata/Mandates?$filter=Id eq 1它返回正確的項目從列表中。

現在顯然這個列表更可能是一個數據庫結構。數據將使用一些ORM檢索並返回到Web API服務。

我不使用實體框架(我不能因爲遺留系統)。

在這種情況下,我將如何使用Web API?如何翻譯url參數,以便過濾器由負責數據訪問的層應用?

+3

如果你的數據庫沒有LINQ提供者,你需要翻譯ODataQueryOptions。從這篇博文開始:http://blogs.msdn.com/b/webdev/archive/2013/02/25/translating-odata-queries-to-hql.aspx –

+0

明白了。您指出我與您的LINQ提供商正確的方向。我發現我可以用我們正在使用的ORM(OpenAccess)輕鬆完成。更多信息: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你可以發表你的評論作爲答案嗎?否則,即使問題得到解決,問題似乎仍然很活躍。 –

回答