C# 使用ODATA服务时重复项目

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.

WCF/odatawebservice返回restful类型为
vBeheer
的项

在客户端上,我创建了使用以下内容的方法:

        SRTDBEntities es = new SRTDBEntities(_serviceRoot);
        return es.vBeheer.Where(b => 
            b.TrackID == trackid && 
            b.PersoonID == CurrentPersoon.ID );
但是,我注意到(经过一个下午的调试)在向表达式添加.ToList()时,结果集损坏了。项目的
Count()
正确且符合预期,但项目的值错误。许多是重复的,许多是缺失的

所以我在linqpad中测试了这个:

  • 按预期返回服务的正确结果,请注意ID 每行应为唯一的值:

但是添加.ToList()时出错

 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