2013-04-11 31 views
1

WCF/OData的web服務返回寧靜vBeheer類型。重複商品消耗ODATA服務

在客戶機我創建的消耗方法:

 SRTDBEntities es = new SRTDBEntities(_serviceRoot); 
     return es.vBeheer.Where(b => 
      b.TrackID == trackid && 
      b.PersoonID == CurrentPersoon.ID); 

但是我注意到(調試的下午之後)當添加.ToList()到表達,將結果集那張損壞。這些項目的Count()是正確的和正如預期的那樣,但項目的值是錯誤的。很多是重複和許多失蹤(顯然)。

所以我在linqpad測試此:

vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).Dump(); 
  • 返回正確的結果的FOM如預期的服務,請注意ID 應爲 「行」 的獨特值:

right

但加入.ToList()時,它出錯

vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump(); 

這導致很多重複的(沒有任何模式?)項目

enter image description here

此行爲是意外和不想要的。甚至更有趣。我們確定數據庫返回正確的結果,在調試服務器時(在web服務中)結果仍然是正確的,但是當到達客戶端時,它發生了可怕的錯誤。

IT不會成爲問題,但數據由DevExpress組件(DXGrid)使用,該組件無論如何都執行ToList()。

注:執行在瀏覽器中查詢:

http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019 

返回一組預期的唯一項目。

+1

這通常表示您的視圖具有不唯一的鍵列(在EF模型中)。雖然有和沒有'ToList()'的區別是意外的。 – 2013-04-11 20:11:11

+0

你能否做出答案阿諾德,我檢查了它,並且在重新生成edmx之後,的確,鍵被改變了。我解決了它,它的工作原理。 – 2013-04-11 20:17:46

回答

5

這通常表示您的視圖具有不唯一的鍵列(在EF模型中)。 EF只用一組鍵值重複它讀取的第一行。

有和沒有ToList()的區別是意想不到的。這只是枚舉查詢的一種方式,Linqpad在執行Dump()時也會這樣。

+0

這在重新生成edmx時發生。鑰匙掉下來了。我把它們放回去 – 2013-04-11 20:29:39