C# 使用ODATA服务时重复项目
WCF/odatawebservice返回restful类型为C# 使用ODATA服务时重复项目,c#,linq,.net-4.0,wcf-data-services,C#,Linq,.net 4.0,Wcf Data Services,WCF/odatawebservice返回restful类型为vBeheer的项 在客户端上,我创建了使用以下内容的方法: SRTDBEntities es = new SRTDBEntities(_serviceRoot); return es.vBeheer.Where(b => b.TrackID == trackid && b.PersoonID == CurrentPersoon.
vBeheer
的项
在客户端上,我创建了使用以下内容的方法:
SRTDBEntities es = new SRTDBEntities(_serviceRoot);
return es.vBeheer.Where(b =>
b.TrackID == trackid &&
b.PersoonID == CurrentPersoon.ID );
但是,我注意到(经过一个下午的调试)在向表达式添加.ToList()时,结果集损坏了。项目的Count()
正确且符合预期,但项目的值错误。许多是重复的,许多是缺失的
所以我在linqpad中测试了这个:
- 按预期返回服务的正确结果,请注意ID 每行应为唯一的值:
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump();
这会导致许多重复(没有任何模式?)项
这种行为是意外的和不需要的。更有趣的是。我们确定数据库返回正确的结果,在调试服务器(在webservice中)时,结果仍然正确,但是当到达客户机时,它会出现可怕的错误
这不会是一个问题,但是数据由执行ToList()的DevExpress组件(DXGrid)使用
注意:在浏览器中执行查询:
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019
返回一组预期的唯一项。这通常表示视图中的键列(在EF模型中)不是唯一的。EF只是用一组键值重复它读取的第一行
不过,使用和不使用
ToList()
的区别是出乎意料的。这只是一种枚举查询的方法,Linqpad在执行Dump()
时也会这样做。你能回答这个问题吗Arnold,我检查了它,在重新生成edmx之后,确实,密钥以某种方式被更改了。我修复了它,它工作了..这是在重新生成edmx时发生的。钥匙掉了。我把它们放回去了
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019