2014-03-27 70 views
0

我試圖通過URI來進行基於odata的基於rest的服務調用。通過odata通過Web API和實體框架查詢數據

我有一個ADO.NET實體數據模型,它映射到SQL後端的其中一個表。在我的「Models」文件夾下創建必要的edmx文件

然後,我使用「Web API 2 Odata Controller with actions,using Entity Frameowrk」選項創建了一個標記爲spcontrol的控制器。然後我設置了模型類和Data上下文類,然後使用Visual Studio腳手架完成剩下的工作。控制器的前幾行看起來像這樣...

public class spcontrolController : ODataController 
{ 
    private Entities db = new Entities(); 

    // GET odata/spcontrol 
    [Queryable] 
    public IQueryable<Database_table_Name> Getspcontrol() 
    { 
     return db.Database_table_Name; 
    } 

    // GET odata/spcontrol(5) 
    [Queryable] 
    public SingleResult<Database_table_Name> GetDatabase_table_Name([FromODataUri] int key) 
    { 
     return SingleResult.Create(db.Database_table_Name.Where(Database_table_Name=> Database_table_Name.ID == key)); 
    } 

然後它繼續執行PUT,POST,PATCH,DELETE方法。在我WebApiConfig.cs文件,我設置以下行

using System.Web.Http.OData.Builder; 
using resttest.Models; 
ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
builder.EntitySet<Database_table_Name>("spcontrol"); 
config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel()); 

最後,我想查詢表的OData。所以我的URL看起來沿

http://testsite:8012/odata/spcontrol?$top=5 

不過線的東西,這個調用不返回任何數據,但只返回下面的文本

{ 
    "odata.metadata":"http://localhost:33421/odata/$metadata#spcontrol","value":[ 
] 
} 

我怎樣才能獲得SQL表中的實際值?我究竟做錯了什麼?

+0

如果網址是http會發生什麼://測試網站:8012 /的OData/spcontrol(1 ),其中1是關鍵。 –

+0

只是「無法找到網頁」消息 – prawn

回答

0

看起來它工作正常 - 你只是沒有數據要返回,所以在響應有效負載數組是空的。添加一些數據並再次點擊端點。

運行數據庫上探查見命令正在從你的服務發送的內容,以檢查正確的表正在使用等

+0

有趣。我在另一張桌子上試過了,它似乎工作。我能夠重新獲得價值。我還沒有運行一個分析器,因爲那樣我就不得不讓DBA參與其中。爲什麼在這張桌子上使用它的想法沒有產生任何結果? – prawn

+0

如果您無權訪問數據庫以進行配置文件,那麼您可以打印EF SQL語句:http://stackoverflow.com/questions/7901814/debugging-entity-framework-sql-statements – eoghank