時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 應爲 「行」 的獨特值:
但加入.ToList()時,它出錯
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump();
這導致很多重複的(沒有任何模式?)項目
此行爲是意外和不想要的。甚至更有趣。我們確定數據庫返回正確的結果,在調試服務器時(在web服務中)結果仍然是正確的,但是當到達客戶端時,它發生了可怕的錯誤。
IT不會成爲問題,但數據由DevExpress組件(DXGrid)使用,該組件無論如何都執行ToList()。
注:執行在瀏覽器中查詢:
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019
返回一組預期的唯一項目。
這通常表示您的視圖具有不唯一的鍵列(在EF模型中)。雖然有和沒有'ToList()'的區別是意外的。 – 2013-04-11 20:11:11
你能否做出答案阿諾德,我檢查了它,並且在重新生成edmx之後,的確,鍵被改變了。我解決了它,它的工作原理。 – 2013-04-11 20:17:46