2013-10-21 69 views
0

我想從我的數據庫中公開一個服務列表,或者僅通過Web API和我的EF DBmodel返回一個服務詳細信息。我使用VS2012 Web API腳手架,到目前爲止相當簡單,它的工作原理是,當我點擊網址(.../api/Services)時,返回JSON中的服務列表。問題是,當我只想獲得一個服務URL (.../api/Services/1)時,我仍然可以獲得所有服務的完整列表,但是當我追蹤它時,它似乎只返回1個對象的計數。WEB API返回所有對象而不是一個

這裏發生了什麼?

以下是2個控制器操作。

PS:我也用的.Where()代替.Find()嘗試,但結果是在這兩種情況下是相同的。

// GET api/Services 
    public IEnumerable<service> Getservices() 
    { 
     var services = db.services.Include(s => s.Category).Include(s => s.Country).Include(s => s.StateProvince).Include(s => s.Territory); 
     return services.AsEnumerable(); 

    } 
    // GET api/Services/5 
    public service Getservice(int id) 
    { 
     service service = db.services.Find(id);   
     if (service == null) 
     { 
      throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); 
     } 
     return service; 
    } 

回答

0

嘗試處理它:var service = db.services.Single(s => s.Id == id)

0

首先,檢查你的數據庫具有查詢或不是一個單一的項目。

如果您是通過主鍵查詢,然後 db.services.SingleOrDefault(s => s.Id == id)應該做的。

如果您在可能返回多個結果的某個字段上查詢,則需要處理該異常。

您使用的篩選變體(Single, SingleOrDefault, First, FirstOrDefault)將取決於代碼的確切語義。

+0

Thnaks raina&Chris。我嘗試了你的建議,但即使我只選擇一條記錄,我仍然可以獲得完整列表。 –

+0

Thnaks raina&Chris。我嘗試了你的建議,但即使我只選擇一條記錄,我仍然可以獲得完整列表。奇怪的是,當我一步一步地追蹤服務內容(返回服務;)時,我只返回一條記錄。但它會呈現我網頁中的所有Json記錄。當我做一個返回JsonResult的標準MVC操作時,我從來沒有遇到過這種情況。它必須與服務具有類別+國家+州外部鍵的事實相關,因爲如果我在它的表類別上使用相同的腳手架Web API控制器。 –

+0

確定修正..與我最後的評論有點相關,這是因爲默認LazyLoading是一個副作用來達到整個對象圖。我使用this.Configuration.LazyLoadingEnabled = false在我的xxModel.Context.cs文件中關閉了它。現在它只是返回我想要的記錄。 –

相關問題